Panel
public class GameJPanel extends JPanel {
private static final long serialVersionUID = 1L;
private Image image;
Random rand = new Random();
public ArrayList<Fish> fishes=new ArrayList<Fish>();
public GameJPanel() {
this.setBounds(40, 65, 800, 480);
image = Toolkit.getDefaultToolkit().getImage("image/mainbg.png");
this.setVisible(true);
}
public void paintComponent(Graphics g)
{
g.drawImage(image,0,0, this.getWidth(), this.getHeight(),this);
}
}
MainFrame
public class MainJFrame extends JFrame implements ActionListener ,Observer{
private static final long serialVersionUID = 1L;
private StartJPanel panel; //开始界面
private GameJPanel mainpanel; //游戏界面
private HelpJPanel helppanel;
JLabel mainLabel;
JButton min, close;
int x;
int y;
protected boolean isStart;
protected boolean isExit;
protected boolean isHelp;
public MainJFrame(Observable ob)
{
ob.addObserver(this);
Observable obs = ob;
this.panel = new StartJPanel(obs);
this.mainpanel = new GameJPanel();
this.helppanel=new HelpJPanel();
// 设置窗体可以跟随鼠标移动和透明
new GameUtil(this);
this.isStart = panel.getIsStart();
this.isExit = panel.isExit();
this.isHelp=panel.getIsHelp();
}
public void showMyFrame(){
this.add(this.panel);
x=Toolkit.getDefaultToolkit().getScreenSize().width;
y=Toolkit.getDefaultToolkit().getScreenSize().height;
this.setBounds((x-880)/2,(y-580)/2,880,580);
this.setUndecorated(true);
this.setIconImage(new ImageIcon("image/icon.png").getImage());
mainLabel=new JLabel(new ImageIcon("image/bg.png"));
min = new JButton(new ImageIcon("image/min.png"));
close = new JButton(new ImageIcon("image/close.png"));
close.setBounds(810, 28, 32, 32);
close.setBorderPainted(false);
close.setContentAreaFilled(false);
mainLabel.add(close);
min.setBounds(772, 28, 32, 32);
min.setBorderPainted(false);
min.setContentAreaFilled(false);
mainLabel.add(min);
min.addActionListener(this);
close.addActionListener(this);
this.add(mainLabel);
this.setVisible(true);
}
public void update(Observable arg0, Object arg1)
{
StartJPanel panel = (StartJPanel) arg1;
//System.out.println("update" + panel.getIsStart());
if(panel.getIsStart())
{
//移除mainPanel对象
this.remove(this.panel);
//添加Panel对象
this.add(this.mainpanel);
this.repaint();
}
if(panel.getIsHelp())
{
//移除mainPanel对象
this.remove(this.panel);
//添加helpPanel对象
this.add(this.helppanel,BorderLayout.CENTER);
this.repaint();
}
}
public void changedPanel()
{
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == min) {
this.setState(JFrame.ICONIFIED);
} else if (e.getSource() == close) {
System.exit(0);
}
}
public void setDefaultCloseOperation(boolean b) {
}
}
我感觉是设定宽度和图片不一致,导致撑了!!!
你的GameJPanel类中的构造函数中有一行是设置了panel的长和宽的,就是this.setBounds(40,65,800,480);当主窗口缩小时,它依然是长800宽480的窗口,不会变的。望采纳!
恢复后的GamePanel大小变成了主面板的大小了。原因不知道。