Java 将操作侦听器添加到带有JTextFields的JoptionPane

Java 将操作侦听器添加到带有JTextFields的JoptionPane,java,swing,actionlistener,Java,Swing,Actionlistener,我正在尝试为正在进行的工作项目创建另一个GUI屏幕。如果触发此GUI屏幕,将打开一个JopOptions窗格,其中包含三个JTextFields和一个confirm按钮(这是实际JopOptions窗格的一部分) 我无法让JTextField上的动作侦听器正常工作。我希望文本字段在用户单击“确认”时拾取输入的任何值。然后,通过各种条件,该计划将继续进行。我已经创建了一个测试类来计划和创建这个与我的程序的其余部分隔离的GUI,所以我可以在下面分享它。我还要补充一点,我为我创建这个GUI的方式道歉。

我正在尝试为正在进行的工作项目创建另一个GUI屏幕。如果触发此GUI屏幕,将打开一个JopOptions窗格,其中包含三个JTextFields和一个confirm按钮(这是实际JopOptions窗格的一部分)

我无法让JTextField上的动作侦听器正常工作。我希望文本字段在用户单击“确认”时拾取输入的任何值。然后,通过各种条件,该计划将继续进行。我已经创建了一个测试类来计划和创建这个与我的程序的其余部分隔离的GUI,所以我可以在下面分享它。我还要补充一点,我为我创建这个GUI的方式道歉。我不太擅长GUI的视觉方面,所以我使用了对我来说最简单的方法,即losts和很多带有边框布局的JPanel。可能不是最好的,但效果很好:)

这是我的密码:

package guitesting;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;



public class GUITesting 

{

    public static int tester = 0;
    public static String resultString = null;
    static JTextField tRDFI = new JTextField("RDFI Number Here",30);

    public static void NOCGUI(){

        String text = "<html>"
                + "This is where the entry detail will go"+
                "<br><br>"
                +"</html>"; 

        JLabel RDFI = new JLabel("RDFI Number:");
        JLabel DDA = new JLabel("DDA:");
        JLabel TCode = new JLabel("Transaction Code:     ");



        tRDFI.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                resultString = tRDFI.getText();
            }
        });

        JTextField tDDA = new JTextField("DDA Number Here",30);
        JTextField tTCode = new JTextField("TCode Here",30);
        JLabel label = new JLabel(text);

        JPanel mainPanel = new JPanel();
        JPanel fieldPanel = new JPanel();
        JPanel textPanel = new JPanel();
        JPanel northFieldPanel = new JPanel();
        JPanel southFieldPanel = new JPanel();
        JPanel tCodePanel = new JPanel();
        JPanel RDFIPanel = new JPanel();
        JPanel DDAPanel = new JPanel();

        mainPanel.setLayout(new BorderLayout());
        fieldPanel.setLayout(new BorderLayout());
        textPanel.setLayout(new BorderLayout());
        northFieldPanel.setLayout(new BorderLayout());
        southFieldPanel.setLayout(new BorderLayout());
        tCodePanel.setLayout(new BorderLayout());
        RDFIPanel.setLayout(new BorderLayout());
        DDAPanel.setLayout(new BorderLayout());

        textPanel.add(label,BorderLayout.CENTER);
        RDFIPanel.add(RDFI,BorderLayout.WEST);
        RDFIPanel.add(tRDFI,BorderLayout.EAST);
        tCodePanel.add(TCode,BorderLayout.WEST);
        tCodePanel.add(tTCode,BorderLayout.EAST);
        DDAPanel.add(DDA,BorderLayout.WEST);
        DDAPanel.add(tDDA,BorderLayout.EAST);
        northFieldPanel.add(RDFIPanel,BorderLayout.NORTH);
        northFieldPanel.add(DDAPanel,BorderLayout.SOUTH);
        southFieldPanel.add(tCodePanel,BorderLayout.NORTH);
        fieldPanel.add(northFieldPanel,BorderLayout.NORTH);
        fieldPanel.add(southFieldPanel,BorderLayout.SOUTH);
        mainPanel.add(textPanel,BorderLayout.NORTH);
        mainPanel.add(fieldPanel,BorderLayout.SOUTH);       

        String options[] = {"Confirm"};

        int result = JOptionPane.showOptionDialog(null, mainPanel, "NOC Builder", JOptionPane.YES_OPTION, 
                JOptionPane.PLAIN_MESSAGE,null, options, options[0]);

        if(result==0 && resultString.equals("A")){
            System.out.println("pass");
        }

    }

    public static void main(String args[]){

        GUITesting.NOCGUI();



        }

}
包测试;
导入java.awt.BorderLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.JLabel;
导入javax.swing.JOptionPane;
导入javax.swing.JPanel;
导入javax.swing.JTextField;
公共类吉他测试
{
公共静态int测试仪=0;
公共静态字符串resultString=null;
静态JTextField tRDFI=新的JTextField(“此处为RDFI编号”,30);
公共静态void NOCGUI(){
String text=“”
+“这是条目详细信息的来源”+
“

” +""; JLabel RDFI=新的JLabel(“RDFI编号:”); JLabel DDA=新JLabel(“DDA:”); JLabel TCode=新的JLabel(“交易代码:”); tRDFI.addActionListener(新ActionListener(){ 已执行的公共无效操作(操作事件e){ resultString=tRDFI.getText(); } }); JTextField tDDA=新的JTextField(“此处为DDA编号”,30); JTextField tTCode=新的JTextField(“这里的TCode”,30); JLabel标签=新的JLabel(文本); JPanel mainPanel=新的JPanel(); JPanel fieldPanel=新的JPanel(); JPanel textPanel=新的JPanel(); JPanel northFieldPanel=新的JPanel(); JPanel southFieldPanel=新的JPanel(); JPanel tCodePanel=新的JPanel(); JPanel RDFIPanel=新的JPanel(); JPanel DDAPanel=新的JPanel(); setLayout(新的BorderLayout()); fieldPanel.setLayout(新的BorderLayout()); setLayout(新的BorderLayout()); setLayout(新的BorderLayout()); setLayout(新的BorderLayout()); tCodePanel.setLayout(新的BorderLayout()); setLayout(新的BorderLayout()); setLayout(新的BorderLayout()); textPanel.add(标签,BorderLayout.CENTER); 添加(RDFI,BorderLayout.WEST); 添加(tRDFI,BorderLayout.EAST); 添加(TCode,BorderLayout.WEST); 添加(tTCode,BorderLayout.EAST); 添加(DDA,BorderLayout.WEST); 添加(tDDA,BorderLayout.EAST); 添加(RDFIPanel,BorderLayout.NORTH); 添加(DDAPanel,BorderLayout.SOUTH); 添加(tCodePanel,BorderLayout.NORTH); 添加(northFieldPanel,BorderLayout.NORTH); 添加(southFieldPanel,BorderLayout.SOUTH); 添加(文本面板,BorderLayout.NORTH); 主面板。添加(fieldPanel,BorderLayout.SOUTH); 字符串选项[]={“确认”}; int result=JOptionPane.showOptionDialog(null,主面板,“NOC生成器”,JOptionPane.YES\u选项, 普通消息,null,选项,选项[0]); if(result==0&&resultString.equals(“A”)){ 系统输出打印项次(“通过”); } } 公共静态void main(字符串参数[]){ NOCGUI(); } }
我认为
ActionListener
不是你想要的。只有当文本字段具有焦点时,用户按Return键时,才会调用它

如果您想监听文本字段中的任何和所有更改,请查看

但是为什么不在对话框返回时引用实际的文本字段呢?这可能是最简单的解决方案。试试这个:

if (result == 0) {
    System.out.println("tRDFI: " + tRDFI.getText());
    System.out.println("tDDA: " + tDDA.getText());
    System.out.println("tTCode: " + tTCode.getText());
}

哦,天哪。我没想到会这么容易。非常感谢威士忌为我的问题提供了一个非常简单的解决方案。我需要一个动作监听器来做吗?不,如果你删除你的动作监听器,你会得到同样的结果。好的。我完全理解它的工作原理,再次感谢您的帮助!
if (result == 0) {
    System.out.println("tRDFI: " + tRDFI.getText());
    System.out.println("tDDA: " + tDDA.getText());
    System.out.println("tTCode: " + tTCode.getText());
}