I have a GridBagLayout, and for some reason my JTextArea has decided that it doesn't want to listen to gridbag's ratio for with, and when create the panel which contains the layout my textbox grows till it takes up 1/2 of the screen. Heres some code:
tp = new JTabbedPane();
tp.setFont(Main.f);
//Adds tabs with several buttosn to my tabbed pane
for(Menu menu : FileManager.menus){
JPanel tmp = new JPanel();
int s = (int) Math.ceil(Math.sqrt(menu.products.size()));
tmp.setLayout(new GridLayout(s,s));
for(Product p : menu.products){//Act as
p.setFont(Main.f);
p.addActionListener(this);
tmp.add(p);
}
tp.addTab(menu.name,null,tmp,null);
}
receipt.setBorder(BorderFactory.createEtchedBorder());
//starting up with GridBag
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.BOTH;
gbc.ipadx = 0;
gbc.ipady = 0;
//sets up and adds the JTabbedPane
gbc.gridx = 0;
gbc.gridy = 0;
gbc.gridwidth = 1;
gbc.gridheight = 1;
gbc.weightx = 0.8;
gbc.weighty = 0.8;
add(tp,gbc);
//sets up and adds receipt - The one that takes up half the screen
gbc.fill = GridBagConstraints.BOTH;
gbc.gridx = 1;
gbc.gridy = 0;
gbc.weightx = 0.2;
receipt.setEditable(false);
receipt.setText("Ticket number: 0\n" +
"Transaction number: 0\n");
receipt.setLineWrap(true);
add(receipt,gbc);
//sets up and adds a JPanel that has a bunch of buttons on it(Uses gridlayout)
gbc.fill = GridBagConstraints.BOTH;
gbc.gridx = 0;
gbc.gridy = 1;
gbc.gridwidth = 2;
gbc.gridheight = 1;
gbc.weightx = 1;
gbc.weighty = 0.2;
add(buttons,gbc);
buttons.setLayout(new GridLayout(1,8));
createButton(newtable);
createButton(remove);
for(JButton a : quicks)
createButton(a);
createButton(pay);
createButton(exit);
revalidate();
repaint();
When I change the TextArea to a blank JButton it doesn't take up much space at all. Basically the space is filled by the object on the right. How do I tell gridbag that I want my left object to span 4/5ths of the screen, and the right object to span the last 1/5th? In this version I attempt to do so using weighting, in my original version I attempted to do so using cells, so the left object was at gridx=0 gridwidth = 4, and the right object was gridx = 4 gridwidth = 1
Neither way worked. I am also open to alternate ideas(like better layouts, or a JTable?)
Thanks for your help, Chase
What it's doing Dimensions for what it should do
If you are not fixed on precisely 4/5 and 1/5 ratio, you can use BorderLayout and place buttons to the center and text area to the East.
Border layout will display the text area as wide as you supply - specify preferred size (width, you can set height to whatever number you want, border layout will ignore it). The rest of the space is then taken up by buttons panel.
You can learn more about border layout here: http://docs.oracle.com/javase/tutorial/uiswing/layout/border.html