学习Swing和Jframe以及其他东西 - 也想要一些关于组织的提示和技巧

Sol*_*rit 2 java swing jframe jtextfield

我正在学习Java程序的摇摆.我很陌生,我正在慢慢掌握它.

我的代码非常基本; 我正在使用动作侦听器来读取输入到JTextField中的文本,但是我的代码给出了一个错误,上面写着"CreditGraphics.java:32:错误:非静态变量,这不能从静态上下文文本中引用.addActionListener(this)",我在论坛上找不到很多有用的解决方案,至少没有适合我编码风格的解决方案.为什么它会给我这个错误,所以我可以避免它以供将来参考?

此外,我喜欢你们想给我的任何组织提示.

我试图制作一个图形应用程序,可以通过JTextField接收信用卡应用程序,然后通过我已经制作的程序运行它,检查卡的有效性.

谢谢!

这是我的代码:

    import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

//if card is entered incorrectly reset textfield by doing textfield.setText(""); 

public class CreditGraphics implements ActionListener{

   public static String cardNum;
   public static JFrame frame;
   public static JPanel panel;
   public static JLabel label;
   public static JTextField text;

   public static void main(String[] args){
      frame = new JFrame("HI");
     panel = new JPanel();
     label = new JLabel("Welcome to MES Banking!");

  text = new JTextField();

  panel.add(label);
  panel.add(text);
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  panel.setPreferredSize(new Dimension(500,500));
  frame.getContentPane().add(panel);
  frame.pack();
  frame.setVisible(true);

  text.addActionListener(this);

   }

   public void actionPerformed(ActionEvent e){
      cardNum = text.getText();
   }


}
Run Code Online (Sandbox Code Playgroud)

Pau*_*tha 5

主要问题:

this意思是阶级,不是static,它不可能是因为它是主要的阶级.因此无法从静态上下文访问它,这是main方法.

不要在main方法中编写所有代码.你会遇到很多这个问题.在构造函数或init方法中执行ui构造.然后在中调用该方法或构造函数main

其他要点:

  • 在Event Dispatch Thread(EDT)上运行您的swing应用程序.在初始线程中查看更多信息.(另请参见下面的示例).

  • 就个人而言,我不会让类实现ActionListener.我想要一个按钮的监听器实例.(见下文)


UPDATE

这是一个带有上述要点的重构器

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class CreditGraphics {

    public String cardNum;
    public JFrame frame;
    public JPanel panel;
    public JLabel label;
    public JTextField text;

    public CreditGraphics() {
        frame = new JFrame("HI");
        panel = new JPanel();
        label = new JLabel("Welcome to MES Banking!");

        text = new JTextField();

        panel.add(label);
        panel.add(text);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        panel.setPreferredSize(new Dimension(500, 500));
        frame.getContentPane().add(panel);
        frame.pack();
        frame.setVisible(true);

        text.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                cardNum = text.getText();
            }
        });
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new CreditGraphics();
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)