2013-09-09 2 views
0

у меня возникли некоторые проблемы с добавлением JMenuBar и JPanel к JFrame, вот мой основной метод:Добавление JMenuBar и JPanel в JFrame

public static Timer timer = new Timer(100, ActionListener.repaint); 


public static void main(String[] args) { 
    Insets in; 
    frame.setSize(600, 500); 
    frame.pack(); 
    in = frame.getInsets(); 
    frame.setSize(600 + (in.left + in.right) - 10, 500 + (in.top + in.bottom) - 10); 
    frame.setResizable(false); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setLocationRelativeTo(null); 
    add.addActionListener(new ActionListener()); 
    frame.setJMenuBar(menuBar); 


    menuBar.add(file); 
    file.add(add); 
    file.add(sub); 

    frame.add(gui); 
    timer.start(); 

    frame.setVisible(true); 
} 

Поле «гуй» мой класс JPanel:

@Override 
public void paintComponent(Graphics g) { 


} 

Вот мой перекрашивать Таймер:

public static java.awt.event.ActionListener repaint = new java.awt.event.ActionListener() { 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     GUI.gui.repaint(); 
    } 
}; 

здесь выход:

You can see it duplicates my JMenuBar

Посмотрите, как он продублировал JMenuBar? Он делает это для чего-то, написанного на этом JPanel. Любые решения?

+0

Предоставление [SSCCE] (http://sscce.org/) поможет вам быстрее. –

ответ

1

Любые решения?

Да. Не звоните Thread.sleep в методе paintComponent. На самом деле не звоните Thread.sleep в любом месте приложения Swing. Для периодических задержек используйте a Swing Timer

+0

Это действительно проблема? Хорошо, дайте ему шанс. – zfollette

+1

Да, это и не стоит задерживать логику внутри метода paintComponent. Это блокирует только «EDT», предотвращающий отображение пользовательских интерфейсов :) – Reimeus

+0

Не проблема, я заменил Thread.sleep на таймер Swing, ту же проблему. – zfollette