Если вы добавите панель в JFrame (используя add()
, как вы делаете здесь), вы можете предположить, что она добавляется как contentPanel
. Тем не менее, гораздо лучше быть явным. Вместо этого:
frame.add(new JPanel()
{}
используйте это:
JPanel panel = new JPanel(new BorderLayout());
// add your stuff to the panel;
frame.add(panel);
EDIT:
после просмотра ваших изменений ясно, что вы инициализируете анонимный класс. Это, как правило, неплохая практика, но здесь вы помещаете много кода инициализации. Код, который вы вводите, находится в блоке с двойными скобками, который по сути помещает его в статический инициализатор. Это кажется как обычный анонимный класс, но на самом деле это не так. С таким большим количеством кода, он заслуживает своего собственного класса. Если вы зашли так далеко, что написали новый класс, все будет в порядке. Я бы посоветовал вам определить его как расширение JPanel
и в вашем собственном конструкторе передать new BorderLayout()
в super
.
РЕДАКТИРОВАТЬ 2:
если вы создаете новый файл / класс с именем Bar
и кодируете его следующим образом:
public class Bar extends JPanel {
public Bar(final JFrame frame) {
String[] tests = { "A+ Certification", "Network+ Certification",
"Security+ Certification", "CIT Full Test Package" };
JComboBox comboBox = new JComboBox(tests);
TextArea text = new TextArea(5, 10);
add(new JLabel("Welcome to the CIT Test Program "));
add(new JLabel("Please select which Test Package from the list below."));
JMenuBar menuBar = new JMenuBar();
JMenu fileMenu = new JMenu("File");
JMenu editMenu = new JMenu("Edit");
JMenu helpMenu = new JMenu("Help");
menuBar.add(fileMenu);
menuBar.add(editMenu);
menuBar.add(helpMenu);
JMenuItem newMenu = new JMenuItem("New (Ctrl+N)");
JMenuItem openMenu = new JMenuItem("Open (Ctrl+O)");
JMenuItem saveMenu = new JMenuItem("Save (Ctrl+S)");
JMenuItem exitMenu = new JMenuItem("Exit (Ctrl+W)");
JMenuItem cutMenu = new JMenuItem("Cut (Ctrl+X)");
JMenuItem copyMenu = new JMenuItem("Copy (Ctrl+C)");
JMenuItem pasteMenu = new JMenuItem("Paste (Ctrl+V)");
JMenuItem infoMenu = new JMenuItem("Help (Ctrl+H)");
fileMenu.add(newMenu);
fileMenu.add(openMenu);
fileMenu.add(saveMenu);
fileMenu.add(exitMenu);
editMenu.add(cutMenu);
editMenu.add(copyMenu);
editMenu.add(pasteMenu);
helpMenu.add(infoMenu);
this.add(comboBox, BorderLayout.NORTH);
this.add(text, BorderLayout.SOUTH);
frame.setJMenuBar(menuBar);
add(new JButton("Select") {
{
addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
frame.dispose();
JOptionPane.showMessageDialog(frame, "IT WORKS!");
}
});
}
});
}
Все, что вам нужно сделать, чтобы использовать его, это позвонить
JPanel panel = new Bar(frame);
однако цель здесь - использовать BorderLayout
, поэтому я бы посоветовал вам включить этот вызов для начала:
public Bar(final JFrame frame) {
super(new BorderLayout());
.... everything else
}