Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPanel添加背景_Java_Swing_Jframe_Jpanel - Fatal编程技术网

Java JPanel添加背景

Java JPanel添加背景,java,swing,jframe,jpanel,Java,Swing,Jframe,Jpanel,如何调整inputpanel和gamepanel的大小,使其可以容纳整个框架?inputpanel.setsize()无法工作,另一个问题是游戏面板无法显示其背景图像 我所做的是在框架中添加了一个主面板,其中包含另外两个面板:inputpanel和gamepanel。两个面板都有边框,但尺寸非常小,我需要它们来适应屏幕 public class GameMaster { JFrame frame = new JFrame(); JPanel

如何调整inputpanel和gamepanel的大小,使其可以容纳整个框架?inputpanel.setsize()无法工作,另一个问题是游戏面板无法显示其背景图像

我所做的是在框架中添加了一个主面板,其中包含另外两个面板:inputpanel和gamepanel。两个面板都有边框,但尺寸非常小,我需要它们来适应屏幕

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

您需要覆盖
GamePanel
类中的
getPreferredSize()
。在进行自定义绘制时,应始终执行此操作。面板没有首选尺寸,因为它没有组件。您使用的布局
FlowLayout
会考虑首选的大小。然后只需
pack()
frame,而不是设置大小。还要注意,组件的
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
    }
}
旁白:

  • /*在paintComponent()中处理*/
    -空检查不能替代空的catch块

  • frame.setVisible()
    应该是添加所有组件后的最后一件事


更新


正如@MadProgrammer向我指出的,您希望面板随框架调整大小。为此,需要使用不同的布局管理器。不符合面板首选尺寸的两个选项是
GridLayout
BorderLayout
。这些将“拉伸您的组件以适应”。因此,选择其中一个,或两者的组合,因为您有嵌套面板。但是你也应该保留被覆盖的
getPreferredSize()
并且仍然
pack()
你的框架这将根据你的首选大小为你提供框架的初始大小你需要在
GamePanel
类中覆盖
getPreferredSize()
。在进行自定义绘制时,应始终执行此操作。面板没有首选尺寸,因为它没有组件。您使用的布局
FlowLayout
会考虑首选的大小。然后只需
pack()
frame,而不是设置大小。还要注意,组件的
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
    }
}
旁白:

  • /*在paintComponent()中处理*/
    -空检查不能替代空的catch块

  • frame.setVisible()
    应该是添加所有组件后的最后一件事


更新


正如@MadProgrammer向我指出的,您希望面板随框架调整大小。为此,需要使用不同的布局管理器。不符合面板首选尺寸的两个选项是
GridLayout
BorderLayout
。这些将“拉伸您的组件以适应”。因此,选择其中一个,或两者的组合,因为您有嵌套面板。但是你也应该保留被覆盖的
getPreferredSize()
并且仍然
pack()
你的框架这将根据你的首选大小为你提供框架的初始大小你需要在
GamePanel
类中覆盖
getPreferredSize()
。在进行自定义绘制时,应始终执行此操作。面板没有首选尺寸,因为它没有组件。您使用的布局
FlowLayout
会考虑首选的大小。然后只需
pack()
frame,而不是设置大小。还要注意,组件的
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
    }
}
旁白:

  • /*在paintComponent()中处理*/
    -空检查不能替代空的catch块

  • frame.setVisible()
    应该是添加所有组件后的最后一件事


更新


正如@MadProgrammer向我指出的,您希望面板随框架调整大小。为此,需要使用不同的布局管理器。不符合面板首选尺寸的两个选项是
GridLayout
BorderLayout
。这些将“拉伸您的组件以适应”。因此,选择其中一个,或两者的组合,因为您有嵌套面板。但是你也应该保留被覆盖的
getPreferredSize()
并且仍然
pack()
你的框架这将根据你的首选大小为你提供框架的初始大小你需要在
GamePanel
类中覆盖
getPreferredSize()
。在进行自定义绘制时,应始终执行此操作。面板没有首选尺寸,因为它没有组件。您使用的布局
FlowLayout
会考虑首选的大小。然后只需
pack()
frame,而不是设置大小。还要注意,组件的
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
    }
}
旁白:

  • /*在paintComponent()中处理*/
    -空检查不能替代空的catch块

  • frame.setVisible()
    应该是添加所有组件后的最后一件事


更新

正如@MadProgrammer向我指出的,您希望面板随框架调整大小。为此,需要使用不同的布局管理器。那两个不尊重你喜欢的尺码的人