Tyi*_*ilo 5 java swing layout-manager border-layout
我无法让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);
}
}
Run Code Online (Sandbox Code Playgroud)
使用BorderLayout.SOUTH常量将cancelButton添加到面板:
panel.add(cancelButton, BorderLayout.SOUTH);
Run Code Online (Sandbox Code Playgroud)
但是在哪里将面板的布局设置为BorderLayout?由于您从未设置此容器的布局,因此它将使用JPanel的默认布局,即FlowLayout.
解决方案:将面板JPanel的布局设置为BorderLayout以获取BorderLayout行为.
一旦你解决了这个问题,你会遇到另一个问题:
for (String text : options) {
JRadioButton option = new JRadioButton(text);
option.setActionCommand(text);
group.add(option);
panel.add(option);
}
Run Code Online (Sandbox Code Playgroud)
您将JRadioButton添加到同一面板JPanel而不考虑布局.我怀疑你想要将JRadioButtons添加到他们自己的JPanel,可能是一个使用GridLayout(1, 0)或GridLayout(0, 1)取决于所需的方向,然后你想将这个JPanel添加到面板,可能在BorderLayout.CENTER位置.
你的okButton也有类似的问题,因为你将它添加到面板而不考虑布局.
你可以尝试改变
panel.add(cancelButton, BorderLayout.SOUTH);
Run Code Online (Sandbox Code Playgroud)
至
frame.add(cancelButton, BorderLayout.SOUTH);
Run Code Online (Sandbox Code Playgroud)
结果:

| 归档时间: |
|
| 查看次数: |
7341 次 |
| 最近记录: |