Horizontally scrolling JT
To: comp.lang.java.gui
I am unable to make my JTable/JScrollPane so that it gains horizontal
scrollbars when container width < JTable min width.
Any suggestions?
SSCCE
-----------------------------------8<---------------------------------
import java.awt.BorderLayout;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.TableColumn;
public class HorizScrollTable extends JPanel {
HorizScrollTable() {
setLayout(new BorderLayout());
JTable table = new JTable(data, headings);
// table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); // [1]
for (int i = 0; i < headings.length; i++) {
TableColumn column = table.getColumnModel().getColumn(i);
int width = widths[i];
column.setPreferredWidth(width);
column.setMinWidth(width); // [2]
}
// JPanel p = new JPanel(new BorderLayout());
// p.add(table, BorderLayout.CENTER); // [3]
JScrollPane scrollPane = new JScrollPane(table);
// scrollPane.setHorizontalScrollBar(new JScrollBar()); // [4]
add(scrollPane, BorderLayout.CENTER);
}
String[] headings = new String[] { "Product Category", "Product",
"Supplier", "Region", "Year", "Period", "Sales" };
int[] widths = { 80, 100, 200, 120, 40, 80, 60 };
Object[][] data = {
{ "Apples", "Granny Smith",
"The Freemantle apple collective",
"Northeast", 2007, "Quarter 2", 156.67 },
{ "Apples", "Granny Smith",
"The Freemantle apple collective",
"South", 2007, "Quarter 2", 1766.01 },
{ "Pears", "Concord", "John Williams and Sons",
"Northeast",
2007, "Quarter 2", 987.29 },
{ "Pears", "Conference", "Montpelier et fils",
"South", 2007,
"Quarter 2", 1221.16 } };
private static void createAndShowGUI() {
JFrame frame = new JFrame("Horizontally scrollable JTable");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JComponent newContentPane = new HorizScrollTable();
newContentPane.setOpaque(true);
frame.setContentPane(newContentPane);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
/*
* Note 1: Causes horiz scroll bar when frame shrunk but
* columns can't grow.
* Note 2: Prevent columns shrinking too far when frame shrunk
* using mouse
* Note 3: H.Scrollbar :-) Height :-) No headings :-( Width :-(
* Note 4: Has no effect.
*/
-----------------------------------8<---------------------------------
---
* Synchronet * The Whitehouse BBS --- whitehouse.hulds.com --- check it out free usenet!
--- Synchronet 3.15a-Win32 NewsLink 1.92
Time Warp of the Future BBS - telnet://time.synchro.net:24