如何调整输入面板和游戏面板的大小以便可以占用整个框架? 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);
}
}
答案 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> 的两个人尊重面板的首选尺寸,可以是GridLayout
或BorderLayout
。这些将&#34;拉伸您的组件以适应&#34;。因此,选择其中一个或两者的组合,就像看到嵌套面板一样。但是你也应该保留覆盖getPreferredSize()
并仍然pack()
你的框架这将根据你的首选尺寸为你提供框架的初始尺寸