Java:从静态类访问JframeLabel



我遇到了一个小麻烦,第一次进行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();
    }
}

相关内容

  • 没有找到相关文章

最新更新