java从另一个类打开一个框架

java从另一个类打开一个框架,java,swing,jfilechooser,Java,Swing,Jfilechooser,所以我试着让它,当我点击一个按钮时,它会打开另一个类的一个框架,而我的filechooser框架不会打开 这是一个名为mainFrame的类: package javatut; import java.awt.EventQueue; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import

所以我试着让它,当我点击一个按钮时,它会打开另一个类的一个框架,而我的filechooser框架不会打开

这是一个名为mainFrame的类:

package javatut;

import java.awt.EventQueue;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;


public class mainFrame {

    private JFrame frmMainwindow;
    private JTextField textField;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    mainFrame window = new mainFrame();
                    window.frmMainwindow.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public mainFrame() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frmMainwindow = new JFrame();
        frmMainwindow.setTitle("Mainwindow");
        frmMainwindow.setBounds(100, 100, 280, 150);
        frmMainwindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frmMainwindow.getContentPane().setLayout(null);

        JButton btnBrowse = new JButton("Browse");
        btnBrowse.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                myButtonAction();
            }
        });
        btnBrowse.setBounds(155, 11, 100, 23);
        frmMainwindow.getContentPane().add(btnBrowse);

        textField = new JTextField();
        textField.setBounds(10, 12, 135, 20);
        frmMainwindow.getContentPane().add(textField);
        textField.setColumns(10);
    }

    private void myButtonAction(){
        Toolkit.getDefaultToolkit().beep();
    }
}
这是名为simply frame的FileChooser类:

package javatut;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFileChooser;
import javax.swing.JFrame;

public class frame {


    private JFrame frmFilechooser;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    frame window = new frame();
                    window.frmFilechooser.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public frame() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frmFilechooser = new JFrame();
        frmFilechooser.setTitle("FileChooser");
        frmFilechooser.setBounds(100, 100, 470, 350);
        frmFilechooser.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frmFilechooser.getContentPane().setLayout(new BorderLayout(0, 0));

        JFileChooser fileChooser = new JFileChooser();
        frmFilechooser.getContentPane().add(fileChooser);

    }

}

如果我没听错的话,你只是少了两行。大型机myButtonAction中的第一个:

 private void myButtonAction(){
  //  Toolkit.getDefaultToolkit().beep();
    new frame();
}
和帧中的另一个初始化:

    private void initialize() {
    frmFilechooser = new JFrame();
    frmFilechooser.setTitle("FileChooser");
    frmFilechooser.setBounds(100, 100, 470, 350);
    frmFilechooser.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frmFilechooser.getContentPane().setLayout(new BorderLayout(0, 0));

    JFileChooser fileChooser = new JFileChooser();
    frmFilechooser.getContentPane().add(fileChooser);
    frmFilechooser.setVisible(true);
}

(我刚刚在底部添加了setVisible行)

最简单、最合理的解决方案是将
myButtonAction()
方法更改为:

private void myButtonAction() {
    JFileChooser fileChooser = new JFileChooser();
    int result = fileChooser.showOpenDialog(frmMainwindow);
    if (result==JFileChooser.APPROVE_OPTION) {
        // do something with the chosen file ..
    }
}

frmFilechooser.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)尝试关闭基于帧的文件选择器..是的,这很有效,谢谢。我一直在找这上面的东西,但是找不到。你能通过改变逐行解释它为什么起作用以及如何起作用吗?抱歉,如果有很多问题要问,但我想学习的不仅仅是复制“.我想学习…”从学习Java文档的位置开始,并阅读所使用的每个方法的描述。例如但更一般地说。。您最喜欢的搜索引擎中的X+Java+教程,其中“X”是您感兴趣的类,在本例中,
JFileChooser
。。本教程解释了我们没有时间或空间去做的事情,通常包括完整的工作示例。