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)
主要问题:
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)
归档时间: |
|
查看次数: |
321 次 |
最近记录: |