我是编程的初学者。我正在搞乱java swing,并试图制作一个愚蠢的应用程序。这是我的代码。它没有显示任何错误,但它无法正常工作。弹出对话框时,变量的值不会显示在对话框中。我使用的逻辑是正确的,因为当我在编译器中运行它时没有GUI的东西,它完美地工作。如果有人能说出我在这里做错了什么,那将非常有帮助。
这是我的计算代码。
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JOptionPane;
public class swingApp extends JFrame{
JLabel label;
JButton button;
public JLabel label2;
JTextField textField = new JTextField("enter you nicknamae");
String username=textField.getText();
public int geniusMeter;
public int sum=0;
public String sumAsString;
public void swingAppLogic(String name){
char[] letters = username.toCharArray();
char [] alphabet={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
int [] measure={7,3,1,13,8,26,15,18,2,5,22,20,16,9,5,11,23,12,25,6,4,21,24,14,17,10};
for(int count=0;count<letters.length;count++){
for (int count1=0;count1<alphabet.length;count1++){
if (letters[count]==alphabet[count1]){
geniusMeter=measure[count1];
sum=sum+geniusMeter;
break;
}
}
}
sumAsString = Integer.toString(sum);
}
public swingApp(){
super("Genius Calculator");
setLayout(new FlowLayout());
label = new JLabel("Wanna know how genius you are?");
label2 = new JLabel(" ");
button = new JButton("press enter and then click me to know the results");
handlerClass handler = new handlerClass();
button.addActionListener(handler);
add(label);
add(label2);
add(button);
add(textField);
}
public class handlerClass implements ActionListener{
public void actionPerformed(ActionEvent event){
JOptionPane.showMessageDialog (null, sumAsString, "Title", JOptionPane.INFORMATION_MESSAGE);
}
}
}
这是我的主要方法
import javax.swing.JFrame;
public class swingAppTester{
public static void main (String [] args){
swingApp object=new swingApp();
object.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
object.setSize(500,400);
object.setVisible(true);
}
}
答案 0 :(得分:0)
您需要在按钮的swingAppLogic(String name)
- 方法中使用您的方法actionPerformed()
:
public class handlerClass implements ActionListener{
public void actionPerformed(ActionEvent event){
swingAppLogic(textField.getText());
JOptionPane.showMessageDialog (null, sumAsString, "Title", JOptionPane.INFORMATION_MESSAGE);
}
}
另一个问题是,你的总和每次运行都会变得越来越大。您需要在每次开始时将其重置为0:
public void swingAppLogic(String name){
sum = 0;
char[] letters = username.toCharArray();
如果您对编码标准有所了解,它对您也会有所帮助。例如,类名应以大写字母开头,以阻止代码混淆。当你拥有超过一小部分时,命名一个JLabel label
会让你感到非常困惑。
HTH!
PS:你计算天才和的逻辑似乎总是输出相同的150?
<强> [编辑]:强>
您正在尝试从用户输入的文本字段中获取名称。但是你在错误的时间这样做,而文本字段仍然包含&#34;输入你的昵称&#34;。因此,而不是username.toCharArray()
使用name.toCharArray()
。然后不再需要变量username
。