2010-08-23 42 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

相關問題