簡體   English   中英

設置gridwidth時,JDialog與GridBagLayout重疊

[英]Overlapping in JDialog w/ GridBagLayout when setting gridwidth

我正在嘗試創建一個看起來像這樣的JDialog:

在此處輸入圖片說明

但是JTextField跨越兩列,因此幾乎可以到達“查找下一個”按鈕。 但是,當我嘗試將JTextField的gridwidth設置為2時,我得到了:

在此處輸入圖片說明

這是我的代碼:

JDialog dialog = new JDialog(frame, "Find");
dialog.setPreferredSize(new Dimension(370, 129));
Point p = frame.getLocation();
dialog.setLocation(p.x + 53, p.y + 170);

Container c = dialog.getContentPane();
GridBagLayout gbl = new GridBagLayout();
c.setLayout(gbl);
GridBagConstraints gbc = new GridBagConstraints();

JLabel label = new JLabel("Find what:");
gbc.gridx = gbc.gridy = 0;
c.add(label, gbc);

JTextField field = new JTextField();
field.setMinimumSize(field.getPreferredSize());
gbc.gridx = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridwidth = 2;
c.add(field, gbc);

JButton findNext = new JButton("Find Next");
findNext.setPreferredSize(new Dimension(82, 23));
gbc.gridx = 3;
c.add(findNext, gbc);

JCheckBox check = new JCheckBox("Match case");
gbc.gridx = 0;
gbc.gridy = 1;
c.add(check, gbc);

JRadioButton up = new JRadioButton("Up"), down = new JRadioButton("Down");
ButtonGroup group = new ButtonGroup();
group.add(up);
group.add(down);
gbc.gridx = 1;
c.add(up, gbc);
gbc.gridx = 2;
c.add(down, gbc);

JButton cancel = new JButton("Cancel");
cancel.setPreferredSize(new Dimension(82, 23));
cancel.addActionListener(e2 -> dialog.dispose());
gbc.gridx = 3;
c.add(cancel, gbc);

Font f = new Font("Segoe UI", Font.PLAIN, 12);
c.setFont(f);
for (Component child : c.getComponents())
    child.setFont(f);

dialog.pack();
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setResizable(false);
dialog.setVisible(true);

提前致謝!

有兩個問題...

  1. 您將gridwidth設置為2 ,但不要重置它: gbc.gridwidth = 2; ,這意味着GridBagConstraints所有后續使用的gridwidth2
  2. setPreferredSize過度使用,實際上,任何使用都是過度使用...

解...

在重新使用GridBagConstraints之前先休息一下gridwidth ...

gbc.gridwidth = 2;
c.add(field, gbc);

gbc.gridwidth = 1;
//...

不要使用setPreferredSize ,您不能控制可以改變跨多個平台的組件所需大小的屬性。

請參閱我應該避免在Java Swing中使用set(Preferred | Maximum | Minimum)Size方法嗎? 進行更多討論

使用setPreferredSize

在此處輸入圖片說明

沒有setPrefferedSize

在此處輸入圖片說明

您能看到按鈕之間的區別嗎?

如果要向組件中添加填充,請使用EmptyBorder和/或GridBagConstraints#insets作為啟動器

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM