我有一个类,它扩展了 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/