0

2 つの 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

2 つの問題があります。まず、mypanel1 を表示するには JDialog フレームを使用する必要があります。JPanel だけを表示することはできないと思います。

したがって、オプションがクリックされたら、新しい JDialog を作成し、それに 2 番目の JPanel を追加します。JDialog ボックスで setVisible メソッドを呼び出すようにしてください。

ここで、別の問題が発生します。作成した最初のフレーム (showConfirm メッセージ) はすべての actionEvents を取得し、JDialog は none を取得します。また、JOption ボックスの親フレームとして null を渡したので、新しい JDialog は "requestFocus" を実行できず、actionEvents を受け取りません。

そのため、生成された新しい JDialogBox がフォーカスを要求できるようにするには、コードをリファクタリングする必要があります。

于 2013-06-03T04:37:17.847 に答える