我有一个名为MyPanel的类扩展JPanel,使用GridLayout。每个单元格包含一个小部件(JComboBox,JTextField,JLabel)。
我的主要类,扩展JFrame,使用GridBagLayout。当我将MyPanel添加到它时,它会占用大量空间(所有窗口都在我的桌面空间之外水平移动)。我怎么能修理? 这是我的主类
的构造函数public Client() {
super("title");
setResizable(false);
Container main_container = getContentPane();
GridBagLayout layout = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
main_container.setLayout(layout);
MyPanel jpanel_acquisto = new MyPanel();
c.gridx = 0;
c.gridy = 0;
c.anchor = GridBagConstraints.FIRST_LINE_START;
c.fill = GridBagConstraints.NONE;
layout.setConstraints(jpanel_acquisto, c);
main_container.add(jpanel_acquisto);
pack();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
MyPanel构造函数
super();
this.setLayout(new GridLayout(2,5));
combo_box_produttori = new JComboBox(lista_produttori);
combo_box_magazzini = new JComboBox(lista_magazzini);
descrizione = new JTextField("120 caratteri max", DESCRIPTION_MAX_LENGHT);
label_descrizione = new JLabel("Descrizione");
quantita_prodotti = new JTextField(20);
label_quantità = new JLabel("Numero prodotti");
salva_acquisto = new JButton("Salva acquisto");
this.add(Box.createGlue());
this.add(label_descrizione);
this.add(label_quantità);
this.add(Box.createGlue());
this.add(Box.createGlue());
this.add(combo_box_produttori);
this.add(descrizione);
this.add(quantita_prodotti);
this.add(combo_box_magazzini);
this.add(salva_acquisto);
答案 0 :(得分:3)
1)看看你的代码,这似乎就是这样;它让它脱离屏幕:
descrizione = new JTextField("120 caratteri max", DESCRIPTION_MAX_LENGHT);
看起来像JTextField
有120列?!
而是使用:
如果您必须将JTextField
包裹在JScrollPane
中。有关详细信息,请参阅How to Use Scroll Panes。
JTextArea
/ JTextPane
/ JTextComponent
。有关详情,请参阅Using Text Components。
您还可以将上述(JTextComponent)包装在JScrollPane
。
您可以这样做:
int rows=6;
int cols=20;//20*6=120 characters
JTextArea ja=new JTextArea(rows,cols);
ja.setWrapStyleWord(true);
ja.setLineWrap(true);
JScrollPane jsp=new JScrollPane(ja);
2)也不要扩展JFrame
类而是创建和实例并使用它,并确保在Event Dispatch Thread上创建/操作Swing组件。有关详情,请参阅here。即:
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame=new JFrame();
frame.add(..);
frame.setVisible(true);
}
});
答案 1 :(得分:0)
Gridbag布局根据尺寸自动拉伸并适合其元素如果您想使用gridbag定位内容。您可以在面板内放置空面板作为缓冲区,填充空间以防止主要元素过度拉伸。
main_container.add(fillerPanel);
main_container.add(jpanel_acquisto);
main_container.add(fillerPanel);
您还需要调整您的网格包约束,使用提供的静态常量here是完整列表