Компоненты Java Swing не отображаются
Помоги мне! Всякий раз, когда я пытаюсь запустить приведенный ниже код, он показывает только кнопку внизу и поле пароля везде. Я хочу видеть все, но не могу
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 ответа
Это
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);
Но я не думаю, что это то, что вы действительно хотите.
Прочитайте
И посмотрите, сможете ли вы найти один или несколько макетов, которые соответствуют вашим требованиям
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);
Вам необходимо добавить все элементы в тип 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);
Это должно просто работать.
Это быстрое решение:
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);
}
Однако вам нужно больше узнать о LayoutManager. Посмотрите здесь: http://docs.oracle.com/javase/tutorial/uiswing/layout/using.html
Также проверьте miglayout.net