无法从静态上下文引用非静态变量:GUI新手

时间:2015-02-21 02:20:03

标签: java user-interface variables static jtextfield

每当我编译它时,我得到一个错误,读取“非静态变量french不能从静态上下文引用”。我刚刚开始使用GUI,但我找不到答案。我确信这很简单,但我无法弄清楚!

非常感谢任何帮助。

 public class ReportCard {
 JTextField french = new JTextField ("French Grade") ;
 public static void main (String args[]) {
    JFrame frame = new JFrame ("Report Card") ;
    frame.setSize(400 , 600) ;
    frame.setVisible(true) ;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) ;

    JPanel bigPanel = new JPanel() ;
    frame.getContentPane().add(bigPanel) ;

    bigPanel.add(french) ;   

2 个答案:

答案 0 :(得分:3)

我强烈建议阅读有关静态作品的内容,有很多人能够比我更好地解释它。现在你可以做一些事情。 使法国静止

 static JTextField french = new JTextField ("French Grade") ;

或将其放入main方法中,因为它已经处于静态上下文中,因此它本身就会使其成为静态。

public class ReportCard {
 public static void main (String args[]) {
    JTextField french = new JTextField ("French Grade") ;
    JFrame frame = new JFrame ("Report Card") ;
    frame.setSize(400 , 600) ;
    frame.setVisible(true) ;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) ;

    JPanel bigPanel = new JPanel() ;
    frame.getContentPane().add(bigPanel) ;

    bigPanel.add(french) ;  

答案 1 :(得分:1)

变量frenchReportCard的实例字段,它在ReportCard的实例之外没有上下文或含义,这意味着除非您首先创建{的实例{1}},您无法引用该变量。

虽然你可以制作ReportCard french,但这会让你陷入潜在问题的黑暗道路,这通常是一个坏主意,因此static引用很容易改变,你的整个计划分崩离析。 static也不是跨对象通信机制,不应该这样使用。

相反,您可以使用static来创建用户界面,例如......

ReportCard