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);

    }
}

猜猜00猜猜01猜猜02猜猜03猜猜04猜猜05猜猜06

这只是让您单击并单独查看每个步骤。

一些想法。

您可能需要设置标签的首选大小(尽管老实说,我原以为将标签放在适当的CENTER位置会解决这个问题)。

我使用的尺寸只适合我自己的形象,你需要自己弄清楚。

另外,尝试使用类似LineBorder. 这将告诉您这是布局问题还是图像/读取问题。

于 2012-09-04T01:01:46.767 回答
1

由于您的问题缺少相关的代码和图像,因此我将在这里进行大胆的猜测,但我猜您的图像并非都具有相同的大小。将 CENTER 中的图像替换为更大的图像不会自动调整父 JFrame 的大小。

MadProgrammer 已经为您的图像大小相同的情况提供了一个很好的示例。如果您有不同尺寸的图像,我会选择一个包含所有图像的 CardLayout 面板,并将该面板添加到 CENTER

于 2012-09-04T06:31:57.343 回答