因此,在这里我有一个GUI窗口,它基本上要求用户选择一个JRadioButton并在JTextField中键入内容,然后选择确认/取消。错误当单击一个JButton - ActionEvent没有执行(解决)
这是一个我们必须制作一个UML到Java文本文件的项目。用户将输入类信息并选择UML关系,并且该程序必须在JTextField上打印Java clsas文本。就像你在eclipse中创建一个新类一样。
我想要做的是做一个布尔型[]来存储布尔值的数组,当用户选择JRadioButton_A它将存储true,当用户选择JRadioButton_B它会存储false.And我也想要输入的东西JTextField由checkName()检查,如果方法返回false,则字符串将存储在ArrayList中。
下面是我的代码 - 错误是当用户单击confirmButton时,程序停止并且没有任何反应。此外,在getName()方法中存在一些问题,而存储true和false的布尔型[]。当用户需要再次输入名称时,它会将废弃的sting/boolean保存到数组中。 (抱歉我的英文不好!)有没有更好的方法来制作这个程序?我觉得我正在复杂的事情,应该有一个更简单的方法来做到这一点。
这里是我的UI类
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Scanner;
public class AddClass extends JFrame{
Scanner input = new Scanner(System.in);
ClassName classObject = new ClassName();
private JRadioButton publicButton, privateButton;
private JLabel className;
private JTextField inputClassName;
private JButton confirmButton;
private JButton cancelButton;
public AddClass(){
super("Add class");
setLayout(new FlowLayout());
publicButton = new JRadioButton("public", true);
privateButton = new JRadioButton("private", false);
className = new JLabel("Class Name: ");
inputClassName = new JTextField(10);
confirmButton = new JButton("Confirm");
cancelButton = new JButton("Cancel");
add(publicButton);
add(privateButton);
add(className);
add(inputClassName);
add(confirmButton);
add(cancelButton);
ButtonGroup group = new ButtonGroup();
group.add(publicButton);
group.add(privateButton);
Handler handler = new Handler();
// Handler2 handler2 = new Handler2();
// Handler3 handler3 = new Handler3();
confirmButton.addActionListener(handler);
// publicButton.addActionListener(handler2);
// privateButton.addActionListener(handler3);
}// end constructor AddClass()
private class Handler implements ActionListener{
public void actionPerformed(ActionEvent event){
String name = inputClassName.getText();
classObject.addName(name);
while (classObject.checkName(name) == true){
JOptionPane.showMessageDialog(null, "Class name invalid. " +
"\nEntered name should not contain java keywords or equal to other existing names. " +
"\nPlease try again."); // doesn't work
name = input.nextLine();
classObject.addName(name);
}// end if
JOptionPane.showMessageDialog(null, "Class saved."); // doesn't work
name = input.nextLine();
classObject.addName(name);
}// end actionPerformed()
}// end Handler class
private class Handler2 implements ActionListener{
public void actionPerformed(ActionEvent event){
boolean b = true;
b = classObject.setPP();
}
}
private class Handler3 implements ActionListener{
public void actionPerformed(ActionEvent event){
boolean b = false;
b = classObject.setPP();
}
}
}// end AddClass
这是我用来存储用户输入
import java.util.Scanner;
import java.util.ArrayList;
public class ClassName {
Scanner input = new Scanner(System.in);
JavaKeywords keyObject = new JavaKeywords();
private ArrayList<String> className = new ArrayList<String>();
private String name = new String();
private int size = className.size();
private Boolean[] bArray = new Boolean[size];
public void addName(String name){
this.name = name;
className.add(name);
}// end addName()
public boolean checkName(String name){
boolean check = true;
for (int i=0; i<=size; i++){
if (keyObject.containsKeyword(className.get(i)) || name.equals(className.get(i))){
boolean o = false;
check = o;
}// end if
}// end for
return check;
}// end checkName
public boolean setPP(){
boolean b = true;
return b;
}
public void addPP(Boolean[] bArray){
this.bArray = bArray;
for (int i=0; i>=size; i++){
bArray[i] = setPP();
}
}// add a Array of boolean. for className[i], its class type = item[i] in bArray.
// public = true, private = false
public String getPublicPrivate(){
String p = "";
for (int i =0; i<=size; i++){
if(bArray[i]=true)
p = "public";
else
p = "private";
}
return p;
}
public void setName(String name){
this.name = name;
}//end setName()
public String getName(){
return name;
}// end getName()
public ArrayList<String> getAllNames(){
return className;
}// end getAllNames()
public void setAllNames(ArrayList<String> className){
this.className = className;
}// end setAllNames()
}//end class
谢谢!我刚刚纠正了这个问题,并持续了一段时间,直到** showMessageDialog **弹出。在我关闭消息框后,程序再次“停止”:( – Sue
下一行('name = input.nextLine();')仍然等待命令行的输入 – Attila
哦,谢谢....我是如此愚蠢的LOL – Sue