因此,我尝试使用swing组件编写程序,因此每当用户单击按钮时,文本框中会显示不同的单词。我一直收到错误说#34;非静态方法按钮()无法从静态上下文中引用"我检查了有关如何使用相同错误修复它的其他答案,但我仍然不理解它。它出现在这里:
color.buttons();
这是我的代码:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class color {
private JFrame f;
private JLabel label;
private JPanel controlPanel;
private JButton button1;
private JButton button2;
private JButton button3;
private JTextField textbox;
public color() {
prepareGUI();
}
public static void main(String args[]) {
color c = new color();
color.buttons();
}
private void prepareGUI() {
f = new JFrame("Colors");
f.setSize(400, 400);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent windowEvent) {
System.exit(0);
}
});
label = new JLabel("", JLabel.CENTER);
label.setBounds(20, 105, 200, 25);
textbox = new JTextField("", JTextField.CENTER);
textbox.setBounds(20, 75, 125, 50);
f.add(label);
f.add(textbox);
f.setVisible(true);
}
private void buttons() {
label.setText("Click a Button to Reveal Text");
textbox.setText("Which Color?");
JButton button1 = new JButton("Blue");
button1.setBounds(10, 305, 120, 75);
JButton button2 = new JButton("Red");
button2.setBounds(140, 305, 120, 75);
JButton button3 = new JButton("Yellow");
button3.setBounds(270, 305, 120, 75);
button1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
textbox.setText("Blue");
}
});
button2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
textbox.setText("Red");
}
});
button3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
textbox.setText("Yellow");
}
});
controlPanel.add(button1);
controlPanel.add(button2);
controlPanel.add(button3);
f.setVisible(true);
}
}
答案 0 :(得分:2)
您应该尝试c.buttons();
而不是color.buttons();
由于无法直接引用非静态方法,因此需要一个对象来执行此操作。
如果该方法是静态的,那么您可以使用color.buttons();
。
答案 1 :(得分:2)
当字段为associated with a class, rather than with any particular object时,会使用static
声明。现在,让我们考虑一下你的代码:
public static void main(String args[]) {
color c = new color();
color.buttons();
}
当然,主要方法的为static
,以便最初运行您的代码。通过扩展,static
main方法中的所有内容也必须为static
,或者换言之,必须能够在不与任何对象直接关联的情况下运行。因此,您无法调用color.buttons()
,因为该方法不是static
方法。
您有两种解决方案:
static
。当然,在这种情况下使它static
实际上可能没有意义,但有时在其他情况下可能是合适的。c
中调用方法,如下所示:c.buttons();
或在构造函数buttons()
内调用color()
。为清楚起见,代码中的第二个解决方案如下所示:
public color() {
prepareGUI();
buttons();
}
OR
public static void main(String args[]) {
color c = new color();
c.buttons();
}
可以在c.buttons()
main方法中调用static
,因为buttons()
方法是与实例化对象c
相关联的方法。
最后,一些最佳做法和提示:
Color
而不是color
。以下命名约定使其他人更容易阅读您的代码,因为命名约定是开发人员同意的一种契约。答案 2 :(得分:1)
您无法从java中的静态方法调用非静态方法。 在您的情况下,您尝试调用方法按钮()这是一个非静态方法,其中main方法(您调用按钮方法)是一个静态方法。 像这样改变你的主要方法。
public static void main (String args[]){
color c = new color();
c.buttons();
}
通过这种方式,您可以调用对象的成员函数。