我通常用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
}
}
答案 0 :(得分:0)
可能会有所帮助。来自JTextComponent的javadoc,JTextField
继承setText()
方法:
的setText
将此
TextComponent
的文本设置为指定的文本。如果文本为null或为空,则具有简单删除旧文本的效果。插入文本后,生成的插入符号位置由插入符类的实现决定。请注意,文本不是绑定属性,因此更改时不会触发
PropertyChangeEvent
。要收听对文字的更改,请使用DocumentListener
。
如果您想知道BoundProperty是什么:
绑定属性在其值发生更改时通知侦听器。这有 两个含义:
- bean类包含addPropertyChangeListener()和 removePropertyChangeListener()方法用于管理bean 听众。
- 当绑定属性发生更改时,bean会发送一个 PropertyChangeEvent到其注册的侦听器。的PropertyChangeEvent 和PropertyChangeListener存在于java.beans包中。
醇>java.beans包还包含一个类PropertyChangeSupport, 它负责绑定属性的大部分工作。这方便 class跟踪属性监听器并包括方便 向所有已注册的侦听器触发属性更改事件的方法。
P.S。:因为OP没有给出任何mcve,这听起来很相关。但是,一旦我们看到OP的代码,我就会强烈反感。