簡體   English   中英

如何在按鈕和組合框中間布局?

[英]How to layout the button and combobox middle?

我是java swing的新手,我編寫了一個啟動程序來格式化文本,但是我對布局感到困惑,結果如下: 在此處輸入圖片說明

我希望組合框和按鈕位於ctrlPanel的中間,並且組合框不應拉伸

 public class MainFrame extends JFrame {
private static final long serialVersionUID = 7553142908344084288L;

private static String[] formats = new String[] {
    "JSON",
    "XML",
    "YAML"
};

public MainFrame() {
    super("jValidator");
    Panel mainPanel = new Panel();
    mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.X_AXIS));
    setContentPane(mainPanel);

    JTextArea fromTextArea = new JTextArea(20, 40);
    JScrollPane fromTextAreaScrollPanel = new JScrollPane(fromTextArea);
    fromTextAreaScrollPanel.setPreferredSize(new Dimension(300, 300));
    fromTextAreaScrollPanel.setBorder(BorderFactory.createEmptyBorder(15, 5, 15, 5));
    mainPanel.add(fromTextAreaScrollPanel);

    JButton fmtButton = new JButton("Format >>");
    JComboBox jComboBox = new JComboBox(formats);
    jComboBox.setBorder(BorderFactory.createTitledBorder("Text Format"));

    JPanel ctrPanel = new JPanel();
    ctrPanel.setLayout(new BoxLayout(ctrPanel, BoxLayout.Y_AXIS));
    ctrPanel.setAlignmentY(Component.CENTER_ALIGNMENT);
    ctrPanel.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5));

    ctrPanel.add(jComboBox);
    ctrPanel.add(Box.createRigidArea(new Dimension(50, 15)));
    ctrPanel.add(fmtButton);
    mainPanel.add(ctrPanel);

    JTextArea toTextArea = new JTextArea(20, 40);
    JScrollPane toTextAreaScrollPanel = new JScrollPane(toTextArea);
    toTextAreaScrollPanel.setPreferredSize(new Dimension(300, 300));
    toTextAreaScrollPanel.setBorder(BorderFactory.createEmptyBorder(15, 5, 15, 5));
    mainPanel.add(toTextAreaScrollPanel);

    setDefaultCloseOperation(EXIT_ON_CLOSE);
    pack();
    setVisible(true);
}

public static void main(String[] args) {
    new MainFrame();
}
 }

您可以使用GridBagLayout而不是BoxLayout ...

JPanel ctrPanel = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
ctrPanel.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5));

gbc.fill = GridBagConstraints.HORIZONTAL;
ctrPanel.add(jComboBox, gbc);
ctrPanel.add(Box.createRigidArea(new Dimension(50, 15)), gbc);
gbc.fill = GridBagConstraints.NONE;
ctrPanel.add(fmtButton, gbc);

在此處輸入圖片說明

看一下在容器內布置組件的更多詳細信息

為此,我建議您使用另一個LayoutManager ,例如GridBagLayout更改ctrPanel創建, ctrPanel所示:

JButton fmtButton = new JButton("Format >>");
JComboBox jComboBox = new JComboBox(formats);
jComboBox.setBorder(BorderFactory.createTitledBorder("Text Format"));

JPanel ctrPanel = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.gridx=0;
c.gridy=1;
ctrPanel.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5));
ctrPanel.add(fmtButton,c);
c.gridy=0;
c.fill = GridBagConstraints.HORIZONTAL;
ctrPanel.add(jComboBox,c);
mainPanel.add(ctrPanel);

它看起來像:

在此處輸入圖片說明

暫無
暫無

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

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