Reputation: 3821
I have a JTable in a JScrollPane. I want the minimum width to be around 600 as its a wide table. I tried setting the minimum size on the table, the scroll pane, and the panel its self. The size doesn't change at all, what am I missing? Its hard to google this because all that comes up is how to set the width of the columns.
Here is the code:
class SearchResults extends JPanel {
/**
* Create the panel.
*/
public SearchResults() {
setMinimumSize(new Dimension(640, 480));
String[][] data= new String[][] {
{null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "VIEW BUTTON"},
{null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "VIEW BUTTON"}};
String[] col = new String[] {
"Last Name", "First Name", "Middle Initial", "Phone Number", "Email", "Project Title", "Project Description", "Amount", "Date Approved", "Date Completed", "College", "Faculty Mentor Name", "Co Grantee", "Major", "Travel Required", "Travel Purpose", "Travel Cost", "Travel Start Date", "Travel End Date", "View"};
JTable table = new JTable(data,col);
table.setMinimumSize(new Dimension(600,200));
JTableHeader header = table.getTableHeader();
JScrollPane pane = new JScrollPane(table);
pane.setMinimumSize(new Dimension(600, 23));
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
add(pane);
}
}
And here is where I add it to the JFrame:
public class Test extends JFrame
{
public static void main(String[] args)
{
Test test = new Test();
test.run();
}
public Test()
{
super("JAVA TEST!");
}
private void run()
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
SearchResults resultsPanel = new SearchResults();
resultsPanel.setMinimumSize(new Dimension(600,200));
add(resultsPanel);
setSize(800,600);
setVisible(true);
}
}
Upvotes: 7
Views: 30235
Reputation: 51535
There are several problems:
Consequestly, there are several screws to tweak (after removing all setXXSize calls :) )
In code (and using JXTable of the SwingX project because it already has api for the second :-) )
String[][] data= new String[][] {
{null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "VIEW BUTTON"},
{null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "VIEW BUTTON"}};
String[] col = new String[] {
"Last Name", "First Name", "Middle Initial", "Phone Number",
"Email", "Project Title", "Project Description", "Amount",
"Date Approved", "Date Completed", "College", "Faculty Mentor Name",
"Co Grantee", "Major", "Travel Required", "Travel Purpose",
"Travel Cost", "Travel Start Date", "Travel End Date", "View"};
JXTable table = new JXTable(data,col);
table.setVisibleColumnCount(10);
table.setHorizontalScrollEnabled(true);
JScrollPane pane = new JScrollPane(table);
JComponent comp = new JPanel(new BorderLayout());
comp.add(pane);
Edit
To solve the 80% requirement (and a little teaser for MigLayout :-) )
// 80% with a minimum of 600 logical pixel:
MigLayout layout = new MigLayout("wrap 2, debug",
"[600:pref, fill, grow][20%]");
JComponent comp = new JPanel(layout);
comp.add(pane, "spany");
comp.add(new JLabel("just something"));
Upvotes: 12
Reputation: 11298
Layout matters. IDE like Netbeans or Eclipse provides hands free layout design by drag and drop.
You can achieve even by code once you understand Swing layouts. Few most used layouts I'm mentioning here
BorderLayout
BoxLayout
FlowLayout
GridLayout
in yours, if you add panel.setLayout( new GridLayout(1,1));
, table will get fixed within frame.
Also you need not extend JPanel
or JFrame
unless if you overwrite something or adding more stuff to frame. Practice to learn.
Upvotes: 0
Reputation: 7357
had some Problems with this stuff too. use the setPreferedSize(new Dimension(800,600));
too.
this could solve your problem
Upvotes: 0