刽子手的照片减半

时间:2012-09-03 23:22:04

标签: java image swing layout-manager

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

好的,所以当我点击错误的按钮时,我会弄清楚如何更改图片,但问题是图片是半边的,所以我的布局有问题......

enter image description here

2 个答案:

答案 0 :(得分: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);

    }
}

Guess00 Guess01 Guess02 Guess03 Guess04 Guess05 Guess06

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

一些想法。

您可能需要设置标签的首选大小(虽然老实说,我认为在CENTER位置使用标签可以解决这个问题。)

我使用的尺寸仅适用于我自己的图像,你需要弄清楚自己的尺寸。

另外,尝试使用LineBorder之类的东西设置组件的边框。这将告诉您它是布局问题还是图像/读取问题。

答案 1 :(得分:1)

我会在这里猜测,因为你的问题缺乏相关的代码和图像,但我猜你并不是所有的图像大小相同。 用更大的图像替换CENTER中的图像不会自动调整父JFrame的大小。

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