Проблема с добавлением строки состояния в JFrame - PullRequest
0 голосов
/ 17 марта 2011

У меня есть класс, который расширяет JFrame и упаковывает в него две Jpanels, одна из которых является панелью состояния JPanel, а другая - панелью contentDisplay.

В зависимости от изменений, внесенных в панель contentDisplay, мне нужно динамически изменитьТекст метки в строке состояния Jpanel.Чтобы достичь этого, я создал отдельный класс для панели состояния со следующим кодом.

public class StatusBar extends JPanel {
    JLabel status;
    /** Creates a new instance of StatusBar */
    public StatusBar() {
        super();
        status = new JLabel("Ready and Running");
        this.add(status);       
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);            
        g.drawString(status.getText(), 10,10);
      }

    public void setMessage(String message) {
        status.setText("Status : " + message);          
        repaint();
    }
}

Я создал объект этого класса и добавил его в JFrame.Панель добавляется, но когда я вызываю метод setMessage () в последующей реализации фрейма, сообщение не перерисовывается, т. Е. Панель состояния не обновляет сообщение о состоянии.Как я могу решить эту проблему?

PS: я не хочу повторно проверять () и перекрашивать () мой родительский JFrame для каждого изменения статуса.Я просто хочу, чтобы панель состояния обновлялась каждый раз, как показано выше.Есть ли способ сделать это?

Ответы [ 2 ]

3 голосов
/ 17 марта 2011

Вам не нужно звонить paintComponent ... Это должно сделать:

public class StatusBar extends JPanel {
    JLabel status;

    public StatusBar() {
        this.setLayout( new FlowLayout(FlowLayout.LEFT, 5, 0 ) ) ;
        status = new JLabel("Ready and Running");
        this.add(status);       
    }

    public void setMessage(String message) {
        status.setText("Status : " + message);          
    }
}

Или действительно вы могли бы просто использовать класс, который расширяет JLabel

public class StatusBar extends JLabel {

    public StatusBar() {
        setMessage( "Ready and Running" );
    }

    public void setMessage( String message ) {
        setText( message ) ;        
    }        
}
0 голосов
/ 05 сентября 2012

не обновление графического интерфейса - это общеизвестная проблема, в этом руководстве объясняется именно то, что вызывает вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...