java - 将状态栏添加到 JFrame 时出现问题

标签 java swing

我有一个类,它扩展了 JFrame 并将两个 Jpanel 打包到其中,一个是状态栏 JPanel,另一个是内容显示面板。

根据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。我只是希望状态面板每次都按照上面的代码刷新。有办法做到这一点吗?

最佳答案

您不应该需要 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 ) ;        
    }        
}

关于java - 将状态栏添加到 JFrame 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5335781/

相关文章:

java - Spring MD5以形式出现

java - TomEE Intellij 理念 : Remote deploy

java - 如何将两个不同的任务放入线程中

java - 波动中未保存更改的警报消息

java - 如何更改 Szymon 类中标签(在 Window 类中)的值并将其显示在窗口中?

java - 如何为给定的语言环境和小数位数格式化 double 值?

Java Swing 表单,无法在新添加的 jtextfield 中键入文本

java - 获得对 JPanel 的关注

java - 为什么自引用指针或 this 超出了按钮的范围?

java - 为什么 JInterFrame 不调整大小?