java JMenuBar не виден? Почему?

1

Я не могу понять, почему моя панель меню не видна. У меня есть следующий код:

//Главный

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class Menu extends JFrame{
    public static void main(String[] args){

        JFrame frame = new JFrame();
        frame.setSize(500,350);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

        menuBar mbObj = new menuBar();

        mbObj.menuBar(frame);
    }
}

//Класс меню

public class menuBar{

        private JMenu file,edit;
        private JMenuItem nFile ,oFile,sFile,saFile,exit;
        private JMenuItem undo,copy,paste;
        private JMenuBar bar;

        public void menuBar(JFrame frame){
            bar = new JMenuBar();
            frame.setJMenuBar(bar);
            bar.setVisible(true);
            file = new JMenu("File");
            edit = new JMenu("Edit");
            bar.add(file);
            bar.add(edit);
        }    
 }
Теги:
swing
jmenubar

1 ответ

2
Лучший ответ

Вызовите setVisible(true) в окне верхнего уровня, здесь JFrame, только после добавления всех компонентов, включая JMenuBar. Вы также захотите избежать вызова setSize(...) на что угодно, а вместо этого используйте менеджеры макетов и call pack() в JFrame после добавления всех компонентов и перед вызовом setVisible(true).

Таким образом, заказ должен быть:

// create JFrame
JFrame frame = new JFrame("Foo");

// here add all components to the JFrame
// .....
// done adding components

frame.pack();
// frame.setLocationRelativeToPlatform(true); // if you wish
frame.setVisible(true);

Как и в других классах, имена должны начинаться с буквы верхнего регистра и не иметь методов с тем же именем, что и класс, поскольку это создает "псевдо" -constructor и будет путать всех.

  • 0
    Тогда для всей информации. Теперь все работает нормально
  • 0
    @SiminaAlin: рад, что у вас это работает!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню