我遇到了一个小麻烦,第一次进行OOP编程时,更新了另一个类的JFrame Label。
我可以访问类和类中的静态变量,我甚至尝试过访问静态方法/函数,但仍然无法从方法内部访问JFrame Label。
我目前有两个类GUI.java和Credit.java,GUI.java有JFrame。
Java有一个标签lblLCD,编码为:
public class GUI extends javax.swing.JFrame {
public static String LCDString = "":
public GUI() {
initComponents();
}
public static void RefreshLCD() {
lblLCD.setText(LCDString);
}
}
Credit.java没有JFrame,编码为:
public class Credit {
public static void Reset() {
GUI.RefreshLCD();
}
}
有什么想法可以让我绕过这件事吗?
您不能从静态方法访问非静态变量。您可能需要了解有关static关键字的更多信息。此外,使用大量静态方法可能是设计不佳的标志。在您的示例中,感觉应该使用较少的静态方法。
话虽如此,您将需要对JFrame(GUI(实例的引用,以便能够调用非静态方法。
我已经创建了一些示例代码,希望能对您有所帮助:
GUI.java
public class GUI extends JFrame{
// Note: this should probably not be a static variable
// You can use a private, non-static variable and create a getter/setter method for it
public static String LCDString = "";
public GUI(){
initComponents();
}
// Note: methods in Java start with a lowercase letter
public void refreshLCD(){
lblLCD.setText(LCDString);
}
}
Credit.java
public class Credit {
// Keep a reference to your jframe, so you can call non-static public methods on it
private GUI gui;
// Pass a GUI object to your Credit object
public Credit(GUI gui){
this.gui = gui;
}
// This should also probably not be a static method.
// Note: methods in Java should start with a lowercase letter
public void reset(){
gui.refreshLCD();
}
}
主要方法
//Your main method
public static void main(String[] args){
// Create a variable for your new GUI object
GUI gui = new GUI();
// Pass our new GUI variable to the Credit object we're creating
Credit credit = new Credit(gui);
// Lets set some text
GUI.LCDString = "Hello World";
// If LCDString was not static it would be something like this:
// gui.setLCDString("Hello World");
// Now we have a credit instance and can call the reset() method on this object
credit.reset();
}
这是因为,从你的问题中,我可以看出,你的变量lblLCD
是非静态的。非静态变量不能从static
方法中引用。
要引用该非静态变量,需要首先实例化类GUI,然后使用对象引用它。
public static void RefreshLCD() {
GUI gui = new GUI();
gui.lblLCD.setText(LCDString);
}
OR
使变量CCD_ 3为静态。
建议:
请勿将static
用于此目的。使方法RefreshLCD()
、方法Reset()
和变量LCDString
非静态。
在Reset()
方法中,安装class GUI
并调用RefreshLCD()
方法。
public class GUI extends JFrame {
public String LCDString = "";
public GUI() {
initComponents();
}
public void RefreshLCD() {
lblLCD.setText(LCDString);
}
}
public class Credit {
public void Reset() {
new GUI().RefreshLCD();
}
}