我有一个GridBagLayout,由于某种原因我的JTextArea已经决定它不想听格子袋的比例,当创建包含布局的面板时,我的文本框增长直到占用1/2屏幕。下面是一些代码:
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();
当我将TextArea更改为空白JButton时,它根本不会占用太多空间。基本上,空间由右侧的物体填充。如何告诉gridbag我希望我的左对象跨越屏幕的4/5,而右边的对象跨越最后的1/5?在这个版本中,我尝试使用加权,在我的原始版本中,我尝试使用单元格,所以左边的对象是gridx = 0 gridwidth = 4,右边的对象是gridx = 4 gridwidth = 1
两种方式都没有效果。我也愿意接受其他想法(比如更好的布局,或JTable?)
感谢您的帮助, 大通
它正在做什么 应该做什么的尺寸
答案 0 :(得分:2)
如果您没有精确定位4/5和1/5比例,则可以使用BorderLayout并将按钮放置到中心和文本区域到东部。
边框布局将显示您提供的文本区域 - 指定首选大小(宽度,您可以将高度设置为您想要的任何数字,边框布局将忽略它)。剩下的空间然后由按钮面板占用。
您可以在此处详细了解边框布局:http://docs.oracle.com/javase/tutorial/uiswing/layout/border.html