Horizontally scrolling JTable
- From: RedGrittyBrick <redgrittybrick@xxxxxxxxxxxxx>
- Date: Wed, 28 Mar 2007 10:17:24 +0100
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<---------------------------------
.
- Follow-Ups:
- Re: Horizontally scrolling JTable
- From: Andrew Thompson
- Re: Horizontally scrolling JTable
- Prev by Date: Re: Best GUI designer (preferable for Eclipse)
- Next by Date: Re: Horizontally scrolling JTable
- Previous by thread: Best GUI designer (preferable for Eclipse)
- Next by thread: Re: Horizontally scrolling JTable
- Index(es):