向JFrame添加状态栏的问题
问题描述:
我有一个扩展JFrame并将两个Jpanel打包到其上的类,一个是状态栏JPanel,另一个是contentDisplay Panel。向JFrame添加状态栏的问题
根据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) ;
}
}
不,我已经试过这个。 setText不起作用,因为我没有单独从JFrame类调用它。我需要在由JFrame使用的不同类中调用setMessage。 如果我这样做,文本将被设置为标签,但它不会显示在框架上。 – 2011-03-17 08:25:33
当你问这个问题时,你不认为这种信息会有帮助吗?请编辑您的问题,尽可能多地提供有关您的实际问题的信息。看起来你的问题与__how__更相关,你正在使用类 – 2011-03-17 08:36:18
@Vamsi,调用setMessage方法无关紧要,这是处理问题的适当方法。如果这不适合你,那么你的问题实际上是在你的代码中的其他地方。 – jzd 2011-03-17 11:03:05