gpt4 book ai didi

swing - 边框布局不工作

转载 作者:搜寻专家 更新时间:2023-10-31 08:11:24 24 4
gpt4 key购买 nike

我无法让 BorderLayout 工作。我希望取消按钮位于底部,但它不起作用。代码:

import java.awt.BorderLayout;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ButtonModel;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;

class Test {
public static JFrame owner;
public static void main(String[] args) {
final JDialog frame = new JDialog(owner, "Test");
frame.setLayout(new BorderLayout());
frame.setSize(500, 300);
final JPanel panel = new JPanel();
final ButtonGroup group = new ButtonGroup();
String[] options = {"1", "2", "3"};
for (String text : options) {
JRadioButton option = new JRadioButton(text);
option.setActionCommand(text);
group.add(option);
panel.add(option);
}
JButton okButton = new JButton("OK");
okButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
ButtonModel selectedModel = group.getSelection();
if (selectedModel != null) {
System.err.println(selectedModel.getActionCommand());
}
}
});
panel.add(okButton);
JButton cancelButton = new JButton("Cancel");
cancelButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
frame.setVisible(false);
frame.dispose();
}
});
panel.add(cancelButton, BorderLayout.SOUTH);
frame.add(panel);
frame.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
frame.setVisible(true);
}
}

最佳答案

您使用 BorderLayout.SOUTH 常量将 cancelButton 添加到面板:

  panel.add(cancelButton, BorderLayout.SOUTH);

但是在哪里设置面板的布局为BorderLayout?由于您从未设置此容器的布局,它将使用 JPanel 的默认布局,即 FlowLayout。

解决方案:将面板 JPanel 的布局设置为 BorderLayout 以获得 BorderLayout 行为。

一旦你解决了这个问题,你就会遇到另一个问题:

  for (String text : options) {
JRadioButton option = new JRadioButton(text);
option.setActionCommand(text);
group.add(option);
panel.add(option);
}

您将 JRadioButton 添加到同一个面板 JPanel 中,而不考虑布局。我怀疑您想将 JRadioButtons 添加到他们自己的 JPanel,可能是使用 GridLayout(1, 0)GridLayout(0, 1) 的 JPanel,具体取决于所需的方向,然后您要将此 JPanel 添加到面板,可能在 BorderLayout.CENTER 位置。

您的 okButton 也有类似的问题,因为您将它添加到面板而不考虑布局。

关于swing - 边框布局不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6884091/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com