JPanel添加背景

时间:2014-08-21 05:47:49

标签: java swing jframe jpanel

如何调整输入面板和游戏面板的大小以便可以占用整个框架? inputpanel.setsize()不会工作,另一个问题是游戏面板不会显示其背景图像。

我做的是我在框架中添加了一个主面板,其中包含另外两个面板,输入面板和游戏面板。两个面板都显示边框,但尺寸非常小,我需要它们适合屏幕

public class GameMaster   {

            JFrame frame = new JFrame();
            JPanel gamepanel  = new Gamepanel();
            JPanel mainpanel = new JPanel();
            JPanel inputpanel = new JPanel();
            JButton button1 = new JButton("Hoy!");

            public GameMaster(){

                frame.setTitle("gayEdward vs Charlie's angels");
                frame.setSize(800,600);

                frame.setVisible(true);
                frame.setDefaultCloseOperation(3);
                frame.setResizable(false);
                frame.setLocationRelativeTo(null);
                frame.setLayout(new FlowLayout());


                gamepanel.setSize(600, 600);
                inputpanel.setSize(200, 600);
                mainpanel.setSize(800, 600);
                gamepanel.setBorder(BorderFactory.createLineBorder(Color.black));
                inputpanel.setBorder(BorderFactory.createLineBorder(Color.black));


                mainpanel.setLayout(new FlowLayout());




                mainpanel.add(gamepanel);
                mainpanel.add(inputpanel);


                frame.add(mainpanel);

            }

这是Gamepanel类,其中Gamepanel应将图像设置为背景

    public class Gamepanel extends JPanel {
        Image image;

        public Gamepanel(){

             try
                {
                  image = ImageIO.read(getClass().getResourceAsStream("C:\\Users\\phg00159\\workspace\\Mp2\\pvzbg.jpg"));;
                }
                catch (Exception e) { /*handled in paintComponent()*/ }

        }


          protected void paintComponent(Graphics g)
          {
            super.paintComponent(g); 
            if (image != null)
              g.drawImage(image, 0,0,this.getWidth(),this.getHeight(),this);
          }
    }

1 个答案:

答案 0 :(得分:3)

您需要覆盖getPreferredSize()课程中的GamePanel。在进行自定义绘画时,您应该始终这样做。面板没有首选尺寸,因为它没有任何组件。您使用FlowLayout的布局会考虑首选大小。然后只需pack()框架,而不是设置尺寸。另请注意,组件的setSize()通常用于空布局(我强烈反对)。对于布局管理器,它们由preferredSize

确定
public class GamePanel extends JPanel {
    private Image image;

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(image.getWidth(this), image.getHeight(this));
        // or whatever you want the size to be
    }
}

除了:

  • /*handled in paintComponent()*/ - 空检查不能替代空的捕获块。

  • frame.setVisible()应该在添加所有组件后执行的最后事项


<强>更新

正如@MadProgrammer向我指出的那样,你希望面板用框架调整大小。为此,您需要使用不同的布局管理器。 赢得&#t> 的两个人尊重面板的首选尺寸,可以是GridLayoutBorderLayout。这些将&#34;拉伸您的组件以适应&#34;。因此,选择其中一个或两者的组合,就像看到嵌套面板一样。但是你也应该保留覆盖getPreferredSize()并仍然pack()你的框架这将根据你的首选尺寸为你提供框架的初始尺寸