救救我!每当我尝试启动下面的代码时,它只显示底部的按钮和其他地方的密码字段。我希望能够看到一切,但我不能
public void setup(){
frame = new JFrame("Votinator 3000");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
voteconfirm = new JLabel("");
textarea = new JTextField(1);
submit = new JButton("Submit Vote!");
chooser = new JList(items);
password = new JPasswordField(1);
password.setVisible(true);
choices = new JComboBox();
choices.addItem("Choose");
choices.addItem("Submit Own");
type = new JPanel();
type.add(textarea);
choices.setEditable(false);
choices.setSelectedIndex(0);
frame.setBounds(300, 300, 400, 400);
frame.getContentPane().add(type);
frame.getContentPane().add(choices);
frame.getContentPane().add(voteconfirm);
frame.getContentPane().add(chooser);
frame.getContentPane().add(textarea);
frame.getContentPane().add(password,BorderLayout.CENTER);
frame.getContentPane().add(submit,BorderLayout.SOUTH);
frame.setVisible(true);
}
答案 0 :(得分:5)
BorderLayout
是JFrame
的默认布局。当BorderLayout.CENTER
方法中没有参数时,代码中的所有组件都会添加到add()
。因此,password
中仅显示BorderLayout.CENTER
,因为它会替换其他组件。尝试创建一个面板,用控件填充它并将此面板添加到框架中,即:
JPanel content = new JPanel();
content.add(type);
content.add(choices);
content.add(voteconfirm);
content.add(chooser);
content.add(textarea);
content.add(password);
content.add(submit);
frame.getContentPane().add(content);
这是它的样子:
编辑:
来自BorderLayout规范:
为方便起见,BorderLayout解释了字符串的缺失 规范与常数CENTER相同:
Panel p2 = new Panel(); p2.setLayout(new BorderLayout()); p2.add(new TextArea()); // Same as p.add(new TextArea(), BorderLayout.CENTER);
答案 1 :(得分:4)
此
frame.getContentPane().add(password,BorderLayout.CENTER);
将替换您添加到屏幕上的任何其他内容......
这样,会将按钮添加到屏幕底部......
frame.getContentPane().add(submit,BorderLayout.SOUTH);
您可以将布局更改为FlowLayout
,这将显示所有内容......
frame.setLayout(new FlowLayout());
frame.setBounds(300, 300, 400, 400);
frame.getContentPane().add(type);
frame.getContentPane().add(choices);
frame.getContentPane().add(voteconfirm);
frame.getContentPane().add(chooser);
frame.getContentPane().add(textarea);
frame.getContentPane().add(password);
frame.getContentPane().add(submit);
但我觉得这不是你真正想要的。
阅读
看看你是否能找到一个或多个符合你要求的布局
答案 2 :(得分:2)
这是快速修复:
public void setup(){
frame = new JFrame("Votinator 3000");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
voteconfirm = new JLabel("");
textarea = new JTextField(1);
submit = new JButton("Submit Vote!");
chooser = new JList(items);
password = new JPasswordField(1);
password.setVisible(true);
choices = new JComboBox();
choices.addItem("Choose");
choices.addItem("Submit Own");
type = new JPanel();
type.add(textarea);
choices.setEditable(false);
choices.setSelectedIndex(0);
frame.setBounds(300, 300, 400, 400);
JPanel p = new JPanel();
p.setLayout(new BoxLayout(p, BoxLayout.PAGE_AXIS));
frame.setContentPane(p);
frame.getContentPane().add(type);
frame.getContentPane().add(choices);
frame.getContentPane().add(voteconfirm);
frame.getContentPane().add(chooser);
frame.getContentPane().add(textarea);
frame.getContentPane().add(password);
frame.getContentPane().add(submit);
frame.setVisible(true);
}
但是,您需要进一步了解LayoutManagers。看看这里: http://docs.oracle.com/javase/tutorial/uiswing/layout/using.html
同时检查miglayout.net
答案 3 :(得分:2)
您需要将所有项目添加到JPanel 类型,然后将JPanel组件添加到JFrame;这是一个例子
frame = new JFrame("Votinator 3000");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
voteconfirm = new JLabel("");
textarea = new JTextField(1);
submit = new JButton("Submit Vote!");
chooser = new JList(items);
password = new JPasswordField(1);
password.setVisible(true);
choices = new JComboBox();
choices.addItem("Choose");
choices.addItem("Submit Own");
type = new JPanel();
type.add(textarea);
choices.setEditable(false);
choices.setSelectedIndex(0);
frame.setBounds(300, 300, 400, 400);
frame.add(type);
type.add(choices);
type.add(voteconfirm);
type.add(chooser);
type.add(textarea);
type.add(password);
type.add(submit);
frame.setVisible(true);
这应该只是工作。