我不知道我在这里做错了什么。只需制作一个简单的程序来测试游戏的概念,我点击三个按钮时会有三个不同的输出。但是,对于第一,第二和第三按钮,我得到一个错误,说它们无法解析为变量。我不知道该怎么做。我做错了什么?
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class CodeTestingGround extends JFrame implements ActionListener {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException
{
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
new CodeTestingGround();
}
public CodeTestingGround() {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
JFrame frameone = new JFrame();
frameone.setLayout(null);
frameone.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frameone.setLocation(screenSize.width / 3, screenSize.height / 3);
JButton buttonone = new JButton("Click here to download viruses!");
JButton buttontwo = new JButton("Click here to get scammed!");
JButton buttonthree = new JButton("Click here to get hacked!");
buttonone.setBounds(10, 10, 260, 30);
buttontwo.setBounds(10, 50, 260, 30);
buttonthree.setBounds(10, 90, 260, 30);
buttonone.addActionListener(this);
buttontwo.addActionListener(this);
buttonthree.addActionListener(this);
frameone.add(buttonone);
frameone.add(buttontwo);
frameone.add(buttonthree);
frameone.pack();
frameone.setVisible(true);
frameone.setSize(300, 400);
}
public void actionPerformed(ActionEvent event) {
Object control = event.getSource();
if (control == buttonone) { // error right here
JOptionPane.showMessageDialog(null, "Viruses sucessfully downloaded!", "Important Alert", JOptionPane.WARNING_MESSAGE);
}
else if (control == buttontwo) { // error right here
JOptionPane.showMessageDialog(null, "YOU HAVE WON A MILLION DOLLARS!!! Enter you credit card information to claim your prize.", "YOU ARE WIN", JOptionPane.INFORMATION_MESSAGE);
}
else if (control == buttonthree) { // error right here
JOptionPane.showMessageDialog(null, "You have been haxored", "get hacked", JOptionPane.ERROR_MESSAGE);
}
}
}
答案 0 :(得分:2)
ActionEvent
和JButton
也支持actionCommand
属性的概念。除非另有说明,ActionEvent#getActionCommand
将返回按钮的文本,您可以使用JButton#setActionCommand
方法更改此内容
JButton buttonone = new JButton("Click here to download viruses!");
buttonone.setActionCommand("bad");
JButton buttontwo = new JButton("Click here to get scammed!");
buttonone.setActionCommand("ugly");
JButton buttonthree = new JButton("Click here to get hacked!");
buttonone.setActionCommand("hacked");
然后您将使用actionCommand
...
ActionEvent
属性
public void actionPerformed(ActionEvent event) {
String cmd = event.getActionCommand();
if ("bad".equals(cmd)) { // error right here
JOptionPane.showMessageDialog(null, "Viruses sucessfully downloaded!", "Important Alert", JOptionPane.WARNING_MESSAGE);
}
else if ("ugly".equals(cmd)) { // error right here
JOptionPane.showMessageDialog(null, "YOU HAVE WON A MILLION DOLLARS!!! Enter you credit card information to claim your prize.", "YOU ARE WIN", JOptionPane.INFORMATION_MESSAGE);
}
else if ("hacked".equals(cmd)) { // error right here
JOptionPane.showMessageDialog(null, "You have been haxored", "get hacked", JOptionPane.ERROR_MESSAGE);
}
}
答案 1 :(得分:0)
JButton在CodeTestingGround()
中定义,意味着无法在该方法之外访问它们。当您尝试从actionPerformed访问它们时,JButtons超出了范围。
您只需移动声明即可解决此问题:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class CodeTestingGround extends JFrame implements ActionListener {
//Declarations go here instead
JButton buttonone;
JButton buttontwo;
JButton buttonthree;
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException
{
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
new CodeTestingGround();
}
public CodeTestingGround() {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
JFrame frameone = new JFrame();
frameone.setLayout(null);
frameone.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frameone.setLocation(screenSize.width / 3, screenSize.height / 3);
buttonone = new JButton("Click here to download viruses!");
buttontwo = new JButton("Click here to get scammed!");
buttonthree = new JButton("Click here to get hacked!");
buttonone.setBounds(10, 10, 260, 30);
buttontwo.setBounds(10, 50, 260, 30);
buttonthree.setBounds(10, 90, 260, 30);
buttonone.addActionListener(this);
buttontwo.addActionListener(this);
buttonthree.addActionListener(this);
frameone.add(buttonone);
frameone.add(buttontwo);
frameone.add(buttonthree);
frameone.pack();
frameone.setVisible(true);
frameone.setSize(300, 400);
}
public void actionPerformed(ActionEvent event) {
Object control = event.getSource();
if (control == buttonone) { // error right here
JOptionPane.showMessageDialog(null, "Viruses sucessfully downloaded!", "Important Alert", JOptionPane.WARNING_MESSAGE);
}
else if (control == buttontwo) { // error right here
JOptionPane.showMessageDialog(null, "YOU HAVE WON A MILLION DOLLARS!!! Enter you credit card information to claim your prize.", "YOU ARE WIN", JOptionPane.INFORMATION_MESSAGE);
}
else if (control == buttonthree) { // error right here
JOptionPane.showMessageDialog(null, "You have been haxored", "get hacked", JOptionPane.ERROR_MESSAGE);
}
}
}
答案 2 :(得分:0)
您的buttons
不在词汇范围内。将它们设为字段,例如
private JButton buttonone = new JButton("Click here to download viruses!");
private JButton buttontwo = new JButton("Click here to get scammed!");
private JButton buttonthree = new JButton("Click here to get hacked!");
从CodeTestingGround
构造函数中删除声明和初始化。类似的东西(或只删除三行)
// JButton buttonone = new JButton("Click here to download viruses!");
// JButton buttontwo = new JButton("Click here to get scammed!");
// JButton buttonthree = new JButton("Click here to get hacked!");
buttonone.setBounds(10, 10, 260, 30);
buttontwo.setBounds(10, 50, 260, 30);
buttonthree.setBounds(10, 90, 260, 30);
// ...