Java JPanel添加背景
如何调整inputpanel和gamepanel的大小,使其可以容纳整个框架?inputpanel.setsize()无法工作,另一个问题是游戏面板无法显示其背景图像 我所做的是在框架中添加了一个主面板,其中包含另外两个面板:inputpanel和gamepanel。两个面板都有边框,但尺寸非常小,我需要它们来适应屏幕Java JPanel添加背景,java,swing,jframe,jpanel,Java,Swing,Jframe,Jpanel,如何调整inputpanel和gamepanel的大小,使其可以容纳整个框架?inputpanel.setsize()无法工作,另一个问题是游戏面板无法显示其背景图像 我所做的是在框架中添加了一个主面板,其中包含另外两个面板:inputpanel和gamepanel。两个面板都有边框,但尺寸非常小,我需要它们来适应屏幕 public class GameMaster { JFrame frame = new JFrame(); JPanel
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
}
}
旁白:
-空检查不能替代空的catch块/*在paintComponent()中处理*/
应该是添加所有组件后的最后一件事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
}
}
旁白:
-空检查不能替代空的catch块/*在paintComponent()中处理*/
应该是添加所有组件后的最后一件事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
}
}
旁白:
-空检查不能替代空的catch块/*在paintComponent()中处理*/
应该是添加所有组件后的最后一件事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
}
}
旁白:
-空检查不能替代空的catch块/*在paintComponent()中处理*/
应该是添加所有组件后的最后一件事frame.setVisible()
更新 正如@MadProgrammer向我指出的,您希望面板随框架调整大小。为此,需要使用不同的布局管理器。那两个不尊重你喜欢的尺码的人