Java JMenuBar не добавлен или отображается неправильно
Я пытаюсь добавить подкласс JMenuBar в пользовательский интерфейс, но по какой-то причине он никогда не появляется. Я пытался использовать JFrame.setJMenubar() и JFrame.add(), я пытался добавить его из вызова SwingUtilities.invokeLater() и т. Д.... Он все еще работал, когда он использовал сам JMenuBar вместо подкласса, поэтому я подозреваю, это как-то связано с этим.
Это код, который инициализирует окно приложения:
public DramaSimWindow() {
initializeSelf();
initializeContainers();
this.setVisible(true);
}
private void initializeSelf() {
initializeContentPane();
this.setBounds(100, 100, 800, 500);
this.setJMenuBar(new DramaSimMenuBar());
this.setResizable(false);
}
Это подкласс JMenuBar, который находится внутри класса основного окна как частный класс:
private class DramaSimMenuBar extends JMenuBar {
private static final long serialVersionUID = 1L;
public DramaSimMenuBar() {
initializeSelf();
}
private void initializeSelf() {
menuBar = new JMenuBar();
initializeFileMenu();
initializeEditMenu();
}
private void initializeFileMenu() {
JMenu fileMenu = new JMenu("File");
fileMenu.add(new JMenuItem("New"));
fileMenu.add(new JMenuItem("Open"));
fileMenu.add(new JMenuItem("Save"));
fileMenu.add(new JMenuItem("Save as"));
fileMenu.add(new JMenuItem("Exit"));
menuBar.add(fileMenu);
}
private void initializeEditMenu() {
JMenu editMenu = new JMenu("Edit");
editMenu.add(new JMenuItem("Copy"));
editMenu.add(new JMenuItem("Cut"));
editMenu.add(new JMenuItem("Paste"));
menuBar.add(editMenu);
}
}
2 ответа
Вы не должны расширять JMenuBar в первую очередь. Просто создайте и используйте JMenuBar вместо того, чтобы расширять его. Кстати, проблема в том, что ваш подкласс JMenuBar не добавляет меню к себе, а к другому JMenuBar, который он создает:
private void initializeSelf() {
menuBar = new JMenuBar();
...
menuBar.add(fileMenu);
должно быть
private void initializeSelf() {
...
this.add(fileMenu);
Зачем вам создавать JMenuBar, если ваш базовый класс расширяется от JMenuBar, поэтому правильный код ниже:
private class DramaSimMenuBar extends JMenuBar {
private static final long serialVersionUID = 1L; public DramaSimMenuBar() { initializeSelf(); } private void initializeSelf() { initializeFileMenu(); initializeEditMenu(); } private void initializeFileMenu() { JMenu fileMenu = new JMenu("File"); fileMenu.add(new JMenuItem("New")); fileMenu.add(new JMenuItem("Open")); fileMenu.add(new JMenuItem("Save")); fileMenu.add(new JMenuItem("Save as")); fileMenu.add(new JMenuItem("Exit")); add(fileMenu); } private void initializeEditMenu() { JMenu editMenu = new JMenu("Edit"); editMenu.add(new JMenuItem("Copy")); editMenu.add(new JMenuItem("Cut")); editMenu.add(new JMenuItem("Paste")); add(editMenu); }
}