2010-08-23 41 views
2

我有2 JTabbedPane。我无法刷新数据。请大家帮忙,这里是我的代码:Java JTabbedPane,更新其他选项卡JLabel值?

pane1:

//.. some codes... 
// This is the ButtonListener 
private class ButtonListener implements ActionListener 
{ 
    public void actionPerformed (ActionEvent event) 
    { 
     userInput = tf.getText(); // tf is JTextField 
     //System.out.println("the input is "+ finalInput); 
     pane2.updateData(userInput); 
    } 
} 

pane2:

public void updateData(String s){ 
    System.out.println("Update data function is called"); 
    labelUser.setFont(new Font("Arial", Font.BOLD, 30)); 
    labelUser.setText("Updated text here " + s); 
} 

这里是我的主类:

import java.awt.*; 
import javax.swing.*; 

public class Main { 
public static Pane2 p2 = new Pane2(); 
    public static void main(String[] args) { 

     JFrame f= new JFrame ("My Frame"); 
     f.setDefaultCloseOperation (JFrame .EXIT_ON_CLOSE); 

     JTabbedPane tp = new JTabbedPane(); 
     p2 = new Pane2(); 

     tp.addTab("Pane1", new PaneFirst(p2)); 
     tp.addTab("Pane2", new PaneSecond()); 

     f.add(tp); 
     f.pack(); 
     f.setVisible(true); 
    } 
} 

labelUser从来没有更新,但我跟踪updateData函数,它被调用。为什么labelUser中的文本未被更新?

编辑:

labelUser” 来自pane2.java类。

+1

请正确缩进代码(使用四个空格来告诉网站“这是代码”)! – 2010-08-23 13:49:04

+0

@Aaron,你为什么不能那样做? – jjnguy 2010-08-23 13:50:59

+0

我没有看到labelUser来自哪里。该部件是否可见? – 2010-08-23 13:51:00

回答

1

注意:显然这并没有解决问题。

一两件事,试图将是:

public void updateData(String s){ 
    System.out.println("Update data function is called"); 
    labelUser.setFont(new Font("Arial", Font.BOLD, 30)); 
    labelUser.setText("Updated text here " + s); 
    repaint(); // add this line to tell your pane to repaint itself 
} 

有机会的话,你的面板只是没有得到重新绘制。

+0

'setText()'应该最终强制重绘: -/ – 2010-08-23 14:11:41

+0

@Aaron,是的。我知道。但是,这是我所能想到的... – jjnguy 2010-08-23 14:13:04

+0

它不工作,任何其他想法? – 2010-08-23 14:51:12

0

可能是一个错字,但在actionPerformed()中,您将文本字段的内容存储在userInput中,但使用finalInput来更新窗格2。

+0

它没有错字。如果错字,我不会通过编译器,我会编辑问题,将finalInout更改为userInput – 2010-08-23 15:21:20

相关问题