无法更改JTextField文本

时间:2016-02-04 09:52:57

标签: java jtextfield

我通常用C#编写代码,我甚至用C#完成应用程序,但我需要将它移植到Java。

刚开始,从未真正使用过Java。

问题很奇怪,因为我没有得到任何错误,只是没有更新,这是代码:

public void setInfoStrip(String infoStrip) {
    InfoStrip.setText(infoStrip);
}

以上是一个应该更新JTextField的Setter(如果我使用ActionListener为一个按钮更新它,它会这样做)但是当我在一个类甚至是main中调用它时它不会更新文本(String [] args)使用此代码的应用程序入口点:

mainGUI GUI = new mainGUI();
GUI.setInfoStrip("test");

或此代码:

new mainGUI().setInfoStrip("test");

我的猜测是它没有任何结果,因为我从静态类中调用它

public static void main(String[] args)

但即使我创建了一个非静态的新类,并从公共staitc void main(String [] args)引用它,然后放入

mainGUI GUI = new mainGUI();
GUI.setInfoStrip("test");

new mainGUI().setInfoStrip("test");

新创建的类,我用

调用
new ImGoingToCry().Alot();

它仍然无效。

我很困惑,我甚至在谷歌上阅读了与此相关的一些问题,但它们都是由此解决的:

mainGUI GUI = new mainGUI();
GUI.setInfoStrip("test");

这是你们有些人要求的MVCE:

public class mainGUI {
// GUI Elements
private JPanel WorkSpace;
private JTabbedPane tabbedPane1;
private JList DetectedProfiles;
private JButton StartGame;
private JTextField CurProf;
private JButton BackupProfiles;
private JButton SearchSaves;
private JButton RetrieveProfiles;
private JTextField InfoStrip;
private JLabel ProfileSize;

/**
 * Getter and Setter functions
 */
public void setInfoStrip(String infoStrip) {
    InfoStrip.setText(infoStrip);
}


// Initialize the main application GUI and set it's properties
public static void main(String[] args) {
    JFrame mainGUIFrame = new JFrame("The Witcher 3 Save Manager | " + " ver. "  + GlobalVariables.appversion);
    mainGUIFrame.setContentPane(new mainGUI().WorkSpace);
    mainGUIFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    mainGUIFrame.setLocationRelativeTo(null);
    mainGUIFrame.setPreferredSize(new Dimension(420, 370));
    mainGUIFrame.setResizable(false);
    mainGUIFrame.pack();
    mainGUIFrame.setVisible(true);
    new mainGUI().run();
}


public void run() {
    /**
     * Initialize the core application functions
     */
    // Load the application settings
    GlobalVariables.Settings();
    // Initialize the app components
    GlobalVariables.Initialize();

    // Pass the value to setter
    new mainGUI().setInfoStrip("test"); // This should change the text but it does nothing there's not even an error
}
}

1 个答案:

答案 0 :(得分:0)

可能会有所帮助。来自JTextComponent的javadoc,JTextField继承setText()方法:

  

的setText

     

将此TextComponent的文本设置为指定的文本。如果文本为null或为空,则具有简单删除旧文本的效果。插入文本后,生成的插入符号位置由插入符类的实现决定。

     

请注意,文本不是绑定属性,因此更改时不会触发PropertyChangeEvent。要收听对文字的更改,请使用DocumentListener

如果您想知道BoundProperty是什么:

  

绑定属性在其值发生更改时通知侦听器。这有   两个含义:

     
      
  1. bean类包含addPropertyChangeListener()和   removePropertyChangeListener()方法用于管理bean   听众。
  2.   
  3. 当绑定属性发生更改时,bean会发送一个   PropertyChangeEvent到其注册的侦听器。的PropertyChangeEvent   和PropertyChangeListener存在于java.beans包中。
  4.         

    java.beans包还包含一个类PropertyChangeSupport,   它负责绑定属性的大部分工作。这方便   class跟踪属性监听器并包括方便   向所有已注册的侦听器触发属性更改事件的方法。

P.S。:因为OP没有给出任何mcve,这听起来很相关。但是,一旦我们看到OP的代码,我就会强烈反感。