Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将一个类中存储在JTextField中的字符串返回给另一个类?_Java_String_Swing_Jtextfield - Fatal编程技术网

Java 如何将一个类中存储在JTextField中的字符串返回给另一个类?

Java 如何将一个类中存储在JTextField中的字符串返回给另一个类?,java,string,swing,jtextfield,Java,String,Swing,Jtextfield,在类UserInterface中,单击浏览器按钮后,我在JTextField中设置一个字符串(文件路径)。现在我想关闭窗口并将存储在JTextField中的字符串返回给调用UserInterface的main类 这是主课 public class MainClass { public void mainClass(String IDEFilePath) throws IOException { UserInterface userInterface = new UserInterfac

在类UserInterface中,单击浏览器按钮后,我在JTextField中设置一个字符串(文件路径)。现在我想关闭窗口并将存储在JTextField中的字符串返回给调用UserInterface的main类

这是主课

public class MainClass {

public void mainClass(String IDEFilePath) throws IOException
{
    UserInterface userInterface = new UserInterface();
    String filePath = userInterface.createInterface();

    System.out.println(filePath);
 }
 }
这是UserInterface类

package com.mycompany.prototype2;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import javax.swing.*;

public class UserInterface {

JButton browseButton;
JTextField pathField;
JFrame frame;
String IdeFilePath;
JPanel panel, topPanel, bottomPanel;

UserInterface()
{
    // Creating instance of JFrame
    frame = new JFrame("Convert IDEJUnit to WebDriver");

    // Setting the width and height of frame
    frame.setSize(350, 200);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    panel = new JPanel(new BorderLayout());

    topPanel = new JPanel(new BorderLayout());
    topPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
    bottomPanel = new JPanel(new BorderLayout());
    bottomPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));

    panel.add(topPanel, BorderLayout.NORTH);
    panel.add(bottomPanel, BorderLayout.SOUTH);
}



public String createInterface() {    

    //Top Panel
    JLabel IDEFilePathLabel = new JLabel("IDE File Path", JLabel.CENTER);
    pathField = new JTextField(10);


    browseButton = new JButton("Browse");
    browseButton.addActionListener(new ActionListener() { 
        @Override
        public void actionPerformed(ActionEvent e)
        {
            String defaultDirectoryPath = "C:\\Users\\Parul\\Desktop";
            JFileChooser chooser = new JFileChooser(defaultDirectoryPath);
            int returnVal = chooser.showOpenDialog(frame);
            chooser.setDialogTitle("Select Location");
            if (returnVal == JFileChooser.APPROVE_OPTION) 
            {
                java.io.File file = chooser.getSelectedFile();
                pathField.setText(chooser.getSelectedFile().toString());
                IdeFilePath = pathField.getText();
            } 
        }
    });



    topPanel.add(IDEFilePathLabel, BorderLayout.WEST);
    topPanel.add(pathField, BorderLayout.CENTER);
    topPanel.add(browseButton, BorderLayout.EAST);


    //Bottom Panel
    JButton okButton = new JButton("OK");
    bottomPanel.add(okButton, BorderLayout.CENTER);

    okButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            frame.dispose();
        }
    });

    frame.add(panel);
    frame.setVisible(true);

    return IdeFilePath ;
}


}

将以下代码添加到MainClass中,并确保filePath为静态

public static void setString(String text)
{
    filePath = text;
}
并从UserInterface调用此方法,如下所示:

MainClass.setText(pathField.getText());
行前:

frame.dispose();

使用
JDialog
而不是
JFrame
-这会让一切变得更简单。除了@resueman的建议,看看系统输出的当前输出是什么,它是null吗?我相信它是空的,因为你已经处理了JFrame,调试并看看调用dispose方法前后字符串变量发生了什么,cheers
static
不是一个应该依赖的解决方案,当OP想要使用类的多个实例时会发生什么?是的,您如何避免使用static?正如建议的那样,使用模态
JDialog