向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) ;   
    }   
} 
+0

不,我已经试过这个。 setText不起作用,因为我没有单独从JFrame类调用它。我需要在由JFrame使用的不同类中调用setMessage。 如果我这样做,文本将被设置为标签,但它不会显示在框架上。 – 2011-03-17 08:25:33

+1

当你问这个问题时,你不认为这种信息会有帮助吗?请编辑您的问题,尽可能多地提供有关您的实际问题的信息。看起来你的问题与__how__更相关,你正在使用类 – 2011-03-17 08:36:18

+2

@Vamsi,调用setMessage方法无关紧要,这是处理问题的适当方法。如果这不适合你,那么你的问题实际上是在你的代码中的其他地方。 – jzd 2011-03-17 11:03:05

没有更新的图形用户界面是一类这个tutorial中的一个普遍知道的问题正是解释到底是什么导致了你的问题。