0

我有一个有两个 Jbutton 的 JPanel。目的是,只要我按下第一个 Jbutton(“你有预测值 ....”),另一个 JPanel 就会弹出,我可以看到其他创建的 Jbutton。问题是当我运行代码时,我可以看到第一个面板,但是当我点击按钮时,什么也没有发生。如果你能帮助我,那就太好了。

public class Main {

    private static Component frame;
    private static JFileChooser inputFile;
    private static JFileChooser outputFile;
    private static String fullpath;
    private static String fullpath1;
    private static String fullpath2;
    private static String fullpath3;

    public static void main(String args[]) throws FileNotFoundException, IOException {

        try {

            GridBagConstraints gbc = new GridBagConstraints();
            gbc.insets = new Insets(5, 5, 5, 5);

            JButton nextPanel = new JButton("Do you have predicted values or residual errors?");
            JButton inputButton = new JButton("Browse predictor dataset");

            JPanel myPanel = new JPanel(new GridBagLayout()); //new panel

            gbc.gridwidth = 1;
            gbc.gridheight = 1;
            gbc.gridx = 0;
            gbc.gridy = 1;
            gbc.anchor = (0 == 0) ? GridBagConstraints.WEST : GridBagConstraints.EAST;
            gbc.fill = (0 == 0) ? GridBagConstraints.BOTH
                : GridBagConstraints.HORIZONTAL;
            gbc.weightx = (0 == 0) ? 0.1 : 0.1;
            gbc.weighty = 1.0;
            myPanel.add(nextPanel, gbc);

            final JPanel myPanel1 = new JPanel(new GridBagLayout());
            myPanel.add(myPanel1);    

            nextPanel.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e){

                    GridBagConstraints gbc1 = new GridBagConstraints();
            gbc1.insets = new Insets(5, 5, 5, 5);
            JButton errorButton = new JButton("Browse residual error associated to each instance");
            JButton predictedButton = new JButton("Browse predicted value associated to each instance");
            gbc1.gridwidth = 1;
            gbc1.gridheight = 1;
            gbc1.gridx = 0;
            gbc1.gridy = 1;
            gbc1.anchor = (0 == 0) ? GridBagConstraints.WEST : GridBagConstraints.EAST;
            gbc1.fill = (0 == 0) ? GridBagConstraints.BOTH
                : GridBagConstraints.HORIZONTAL;
            gbc1.weightx = (0 == 0) ? 0.1 : 0.1;
            gbc1.weighty = 1.0;
            myPanel1.add(errorButton, gbc1);
                }
            });

            gbc.gridwidth = 1;
            gbc.gridheight = 1;
            gbc.gridx = 0;
            gbc.gridy = 9;
            gbc.anchor = (0 == 0) ? GridBagConstraints.WEST : GridBagConstraints.EAST;
            gbc.fill = (0 == 0) ? GridBagConstraints.BOTH
                : GridBagConstraints.HORIZONTAL;
            gbc.weightx = (0 == 0) ? 0.1 : 0.1;
            gbc.weighty = 1.0;
            myPanel.add(inputButton, gbc);

            inputButton.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    JFileChooser inputFile = new JFileChooser();
                    inputFile.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
                    if (inputFile.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
                        File file1 = inputFile.getSelectedFile();
                        String fullpathTemp = (String) file1.getAbsolutePath();
                        fullpath = fullpathTemp;
                    }
                 }
            });

             int result = JOptionPane.showConfirmDialog(null, myPanel, "CPM Program", JOptionPane.OK_CANCEL_OPTION);


 } catch (Exception e) {
             System.err.println("Error: " + e.getMessage());
         } finally {
         }
    }
}
4

1 回答 1

0

你有两个问题。首先,您应该使用 JDialog 框架来显示 mypanel1——我认为您不能只显示 JPanel 本身。

因此,当单击该选项时,创建一个新的 JDialog 并将您的第二个 JPanel 添加到其中。请务必调用 JDialog 框上的 setVisible 方法。

现在,您将遇到另一个问题。您创建的第一帧(showConfirm 消息)将获得所有 actionEvents,而您的 JDialog 将获得 none。而且,由于您将 null 作为 JOption 框的父框架传入,因此您的新 JDialog 将无法“requestFocus”,因此不会收到任何 actionEvents。

因此,您需要重构代码以确保生成的任何新 JDialogBox 都可以请求焦点。

于 2013-06-03T04:37:17.847 回答