2

PlaySci ボタンが押されたときに画像を開こうとしているので、画像を PlaySci アクションリスナーに入れましたが、終了ボタンが押されたときにのみ開きますか?

私は何時間もそれを見てきましたが、まだ理由がわかりません。終了ボタンをすべて削除しようとしましたが、画像がまったく表示されません。

画像をJLabel上部に作成しました:

ImageIcon scis1 = new ImageIcon("scis.jpg");

private JLabel picture = new JLabel(scis1);

私の PlaySci ボタン ActonListener のコードは次のとおりです。

class PlaySciHandler implements ActionListener {
    public void actionPerformed(ActionEvent event) {

        String computerRand = sps.computerChoice();
        txtComputerRand.setText(computerRand);
        String result = sps.play(Sps.SCISSORS);
        txtResult.setText(result);
        picture.setBounds(60, 200, 400, 400);// this is the image I want displayed when the PlaySci button is pressed
        panel.add(picture);
    }
}

これは終了ボタンの ActionListener です (何らかの理由でこれが画像を表示する唯一の方法です)。

class exitHandler implements ActionListener{
    public void actionPerformed(ActionEvent e) {
        int n = JOptionPane.showConfirmDialog(frame, //when this button is pressed the image comes up?
                "Are you sure you want to exit?", 
                "Exit?", 
                JOptionPane.YES_NO_OPTION);
        if(n == JOptionPane.YES_OPTION){
            System.exit(0);
        }
    }
}

これは、ボタンを作成し、ActionListener を追加するコードです。

                btnPlaySci = new JButton ("Scissors!");
        btnPlaySci.setBounds(180, 40, 110, 20);
        btnPlaySci.addActionListener(new PlaySciHandler());
        panel.add (btnPlaySci);
        btnPlaySci.setForeground(Color.MAGENTA);

どんな助けでも大歓迎です。

4

2 に答える 2

3

パネルに画像を追加した後、パネルを再描画する必要があります。PlaySciHandler actionPerformedメソッドのコードを参照してください。

class PlaySciHandler implements ActionListener {
        public void actionPerformed(ActionEvent event) {

            String computerRand = sps.computerChoice();
            txtComputerRand.setText(computerRand);
            String result = sps.play(Sps.SCISSORS);
            txtResult.setText(result);
            picture.setBounds(60, 200, 400, 400);// this is the image I want displayed when the PlaySci button is pressed
            panel.add(picture);
            panel.repaint();//Must repaint the panel .
        }
    }

注: 補足null Layoutとして、 for を使用しないことをお勧めJPanelLayoutsますSwing。Layouts の使用に関する詳細については、この公式サイトを参照してください。もう 1 つは、常に Java の命名規則に固執することです。Classは代わりexitHandlerに と書く必要がありExitHandlerます。詳しくは、この公式サイトをご覧ください。

于 2013-03-17T15:30:34.670 に答える
2

ブロックにを追加しないでください。メソッドに追加しJLabelて、非 表示にします。ボタンのクリック後に表示したい場合は、表示にします:class PlaySciHandler implements ActionListenercreateForm()picture.setVisible(false);picture.setVisible(true);

于 2013-03-17T15:26:42.620 に答える