Java 我无法使我的第一个GUI工作

Java 我无法使我的第一个GUI工作,java,swing,user-interface,actionevent,Java,Swing,User Interface,Actionevent,在我们的老师开始正式教授这门课程之前,我一直在为我的Java课堂上的老师开发一个基本的GUI应用程序,并介绍了设置GUI的适当对象和语法,让我自己去寻找答案。应用程序本身称为StringApps,但不完整,因为当我测试一个textfield响应时,它没有给我一个我在代码中请求的消息对话框。下面是以下代码及其附带的实用程序类: import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Str

在我们的老师开始正式教授这门课程之前,我一直在为我的Java课堂上的老师开发一个基本的GUI应用程序,并介绍了设置GUI的适当对象和语法,让我自己去寻找答案。应用程序本身称为
StringApps
,但不完整,因为当我测试一个textfield响应时,它没有给我一个我在代码中请求的消息对话框。下面是以下代码及其附带的实用程序类:

 import javax.swing.*;
 import java.awt.*;
 import java.awt.event.*;

public class StringApps extends JFrame
{
    private JLabel lblIntro;
    private JButton btnReverseString;
    private JButton btnVowelCounter;
    private JButton btnPalindromeTester;
    private JLabel lblReverseString;
    private JLabel lblVowelCounter;
    private JLabel lblPalindromeTester;
    private JTextField txtFldReverseString;
    private JTextField txtFldVowelCounter;
    private JTextField txtFldPalindromeTester;
    private JButton btnConfirm1;
    private JButton btnConfirm2;
    private JButton btnConfirm3;
    private ButtonListener listener;

    public StringApps()
    {
        Container cp = getContentPane();
        setLayout(new FlowLayout());
        setTitle("String Apps");
        lblIntro = new JLabel("Welcome to String Apps");
        btnReverseString = new JButton("String Reverser");
        btnVowelCounter = new JButton("Vowel Counter");
        btnPalindromeTester = new JButton("Palindrome Tester");
        btnReverseString.addActionListener(new ButtonListener());
        btnVowelCounter.addActionListener(new ButtonListener());
        btnPalindromeTester.addActionListener(new ButtonListener());
        cp.add(lblIntro);
        cp.add(btnReverseString);
        cp.add(btnVowelCounter);
        cp.add(btnPalindromeTester);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(600, 400);
    }//StringApps

    public static void main(String[]args)
    {
      StringApps foo = new StringApps();
    }//main

    private class ButtonListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            Container cp = getContentPane();
            Object clicked = e.getSource();
            lblReverseString = new JLabel("Please enter your String here:");
            txtFldReverseString = new JTextField(15);
            btnConfirm1 = new JButton("Okay");
            lblVowelCounter = new JLabel("Please enter your String here:");
            txtFldVowelCounter = new JTextField(15);
            btnConfirm2 = new JButton("Okay");
            lblPalindromeTester = new JLabel("Please enter your String here:");
            txtFldPalindromeTester = new JTextField(15);
            btnConfirm3 = new JButton("Okay");

            if(clicked == btnReverseString)
            {
                cp.add(lblReverseString);
                cp.add(txtFldReverseString);
                cp.add(btnConfirm1);
                if(clicked == btnConfirm1)
                {
                    String fwd = txtFldReverseString.getText();
                    txtFldReverseString.selectAll();
                    String rev = StringUtil.reverseString(fwd);
                    JOptionPane.showMessageDialog(null, ("String Reversed: " + rev));
                }
            }//if
            else if(clicked == btnVowelCounter)
            {

            }
            else if(clicked == btnPalindromeTester)
            {
            }
        }//actionPerformed
    }//ButtonListener
}//StringApps(class)
实用程序类别:

public class StringUtil
{
    public static String reverseString(String fwd)
    {
        String rev = "";
        for(int i = fwd.length() - 1; i >= 0; i--)
            rev += fwd.charAt(i);
        return rev;
    }
    public static int vowelCounter(String word)
    {
        int vowels = 0;
        word.toLowerCase();
        for(int i = word.length() - 1; i >= 0; i--)
        {
            if(word.charAt(i) == 'a'|| word.charAt(i) == 'e'|| word.charAt(i) == 'i'||word.charAt(i) == 'o'||word.charAt(i) == 'u')
                vowels++;
        }
        return vowels;
    }
    public static boolean palindromeTest(String word)
    {
        boolean palindrome;
        String rev, fwd, strip = "";
        word.toLowerCase();
        for(int i = 0; i <= word.length() - 1; i++)
            if((word.charAt(i) > 47 && word.charAt(i) < 58)||(word.charAt(i) > 96 && word.charAt(i) < 123))
                strip += word.charAt(i);
        fwd = strip;
        rev = reverseString(fwd);
        if(rev.equals(fwd))
            palindrome = true;
        else
            palindrome = false;
        return palindrome;
    }
}
公共类StringUtil
{
公共静态字符串反向限制(字符串前进)
{
字符串rev=“”;
对于(int i=fwd.length()-1;i>=0;i--)
rev+=前向特征(i);
返回版本;
}
公共静态int元音计数器(字符串字)
{
int元音=0;
word.toLowerCase();
对于(int i=word.length()-1;i>=0;i--)
{
if(word.charAt(i)='a'| word.charAt(i)='e'| word.charAt(i)='i'| word.charAt(i)='o'| word.charAt(i)='u')
元音++;
}
返回元音;
}
公共静态布尔回文测试(字符串字)
{
布尔回文;
字符串版本,前向,带=”;
word.toLowerCase();
对于(int i=0;i 47&&word.charAt(i)<58)| |(word.charAt(i)>96&&word.charAt(i)<123))
条带+=字字符(i);
fwd=条带;
rev=反向限制(fwd);
如果(版本等于(前进))
回文=真;
其他的
回文=假;
返回回文;
}
}

我认为您不了解GUI的工作原理。与控制台应用程序不同,它们不是以线性方式运行的,它们通常是事件驱动的

单击或键入某个内容时,会引发一系列事件,您会对此作出响应

在您的
ButtonListener
中,您通过更新UI并检查单击的
源是否与刚才创建和添加的按钮相同来响应
btnReverseString
事件……这不起作用有两个原因

第一个是,每次执行
action
时,您都会创建一个
btnConfirm1
的新实例,这意味着
单击的
btnConfirm1
不可能相等,二者不可能同时单击
btnReverseString
btnConfirm1


首先看一下和,这将允许您向运行代码中的内联用户提问(这似乎是您正在尝试做的;)

看一下windows builder for eclipse。然后将它生成的代码与您试图实现的代码进行比较。很抱歉,我还没有给您的答案打分,因为我仍在测试它,以将其视为一个合理的解决方案。我访问了您发送给我的第一个链接,但在尝试了本教程所基于的NetBeans之后,我决定尝试修复自己的代码是最好的选择。我最终想出了一个解决方案,使整个程序工作,但它仍然需要大量的调整。谢谢你的回答,因为在你之后的几个小时里没有其他人回复,我同意你作为回答者。