1

帮我!每当我尝试启动下面的代码时,它只显示底部的按钮和其他任何地方的密码字段。我想看到一切,但我不能

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);
}
4

4 回答 4

5

BorderLayout是 的默认布局JFrameBorderLayout.CENTER当方法中没有参数时,将添加代码中的所有组件add()。因此仅passwordBorderLayout.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);
于 2012-10-24T02:02:08.090 回答
4

frame.getContentPane().add(password,BorderLayout.CENTER);

将替换您添加到屏幕上的任何其他内容...

这会将按钮添加到屏幕底部...

frame.getContentPane().add(submit,BorderLayout.SOUTH);

您可以将布局更改为 a 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);

但我几乎不认为那是你真正想要的。

通读一遍

看看你是否能找到一种或多种符合你要求的布局

于 2012-10-24T02:02:46.703 回答
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

于 2012-10-24T02:02:59.333 回答
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);
  


那应该很简单。

于 2012-10-24T02:21:41.447 回答