【问题标题】:Java JTabbedPane, update others tab JLabel value?Java JTabbedPane,更新其他选项卡 JLabel 值?
【发布时间】:2010-08-23 13:48:39
【问题描述】:

我有 2 个JTabbedPane。我无法刷新数据。请帮忙,这是我的代码:

窗格1:

//.. 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);
    }
} 

窗格2:

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类。

【问题讨论】:

  • 请正确缩进代码(使用四个空格告诉网站“这是代码”)!
  • @Aaron,你为什么不能这样做?
  • 我看不到 labelUser 来自哪里。小部件是否可见?
  • 抱歉,编辑了我的问题。请看一下
  • 您必须包含所有相关代码:Pane2、PaneFirst、PaneSecond 等。这里没有通灵者可以在不查看代码的情况下调试您的代码。

标签: java swing jlabel jtabbedpane


【解决方案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
}  

您的面板可能没有重新粉刷。

【讨论】:

  • setText() 最终应该强制重绘:-/
  • 如需更多日志,请在 System.out.println 中添加“s”: System.out.println("使用文本调用更新数据函数:" + s);并调试。
  • @web_starter - 你能告诉我们创建第二个窗格的代码吗?或者只是仔细检查您真的labelUser 添加到窗格中并且没有类似pane.add(new Label("test"));
  • 和 Andreas 一样,我认为您更新了错误的标签。可能不是添加到pane2的那个。
  • 我可以 100% 保证,我更新了正确的标签,为什么?我做了一个测试,我在pane2中创建了一个按钮,当触发时我调用了相同的函数updateData(),它更新了我的labelUser。我非常非常非常肯定,我正在更新正确的标签.. =(
【解决方案2】:

可能是错字,但是 - 在actionPerformed() 中,您将文本字段的内容存储在userInput 中,但使用finalInput 更新pane2。

【讨论】:

  • 不是错字。如果错字,我不会通过编译器,我将编辑问题,将 finalInout 更改为 userInput
猜你喜欢
  • 2014-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多