2
public Hangman(){

    Container content =getContentPane();
    content.setLayout(new GridLayout(0,1));

   btnAddWord.addActionListener(this);
   btnRestart.addActionListener(this);
   btnHelp.addActionListener(this);
   btnExit.addActionListener(this);

   panel2.add(label);
   panel3.add(word);
   panel4.add(btnAddWord);
   panel4.add(btnRestart);
   panel4.add(btnHelp);
   panel4.add(btnExit);

public static void main (String [] args){
    Hangman frame = new Hangman();
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(400, 600);
    frame.add(panel1, BorderLayout.NORTH);
    frame.add(panel2, BorderLayout.CENTER);
    frame.add(panel3, BorderLayout.SOUTH);
    frame.add(panel4, BorderLayout.SOUTH);
}

さて、間違ったボタンがクリックされたときに画像を変更する方法を理解しましたが、問題は画像が半分になっているため、レイアウトに問題があります...

ここに画像の説明を入力してください

4

2 に答える 2

6

よし、急いで片付けた。

public class HangPane extends JPanel {

    private JLabel lblImage;
    private JButton btnAction;
    private int guess = 0;

    public HangPane() {

        setLayout(new BorderLayout());
        lblImage = new JLabel();
        lblImage.setPreferredSize(new Dimension(46, 172));
        lblImage.setHorizontalAlignment(JLabel.CENTER);
        lblImage.setVerticalAlignment(JLabel.CENTER);
        btnAction = new JButton("Guess");

        String imageName = "HG0.png";
        lblImage.setIcon(new ImageIcon(imageName));


        btnAction.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                String imageName = "HG0.png";

                guess++;
                switch (guess) {
                    case 1:
                        imageName = "HG1.png";
                        break;
                    case 2:
                        imageName = "HG2.png";
                        break;
                    case 3:
                        imageName = "HG3.png";
                        break;
                    case 4:
                        imageName = "HG4.png";
                        break;
                    case 5:
                        imageName = "HG5.png";
                        break;
                    case 6:
                        imageName = "HG6.png";
                        break;
                    default:
                        guess = 0;
                        break;
                }

                lblImage.setIcon(new ImageIcon(imageName));

            }
        });

        add(lblImage, BorderLayout.CENTER);
        add(btnAction, BorderLayout.SOUTH);

    }
}

Guess00Guess01Guess02Guess03Guess04Guess05Guess06

これにより、クリックして各ステップを個別に確認できます。

いくつかのアイデア。

ラベルの適切なサイズを設定する必要がある場合があります (ただし、正直なところ、ラベルを適切な位置に配置すれば問題は解決すると思いましたCENTER)。

私が使用したサイズは、私自身のイメージにのみ適しています。自分で把握する必要があります。

また、 などを使用してコンポーネントの境界線を設定してみてくださいLineBorder。これにより、レイアウトの問題なのか、画像/読み取りの問題なのかがわかります。

于 2012-09-04T01:01:46.767 に答える
1

あなたの質問には関連するコードと画像が欠けているので、ここで大げさな推測をしますが、すべての画像が同じサイズであるとは限りません. CENTER の画像をより大きな画像に置き換えても、親 JFrame のサイズは自動的に調整されません。

MadProgrammer は、画像が同じサイズの場合の良い例を既に示しています。サイズの異なる画像がある場合は、すべての画像を含む CardLayout を持つパネルを選択し、そのパネルを CENTER に追加します

于 2012-09-04T06:31:57.343 に答える