界面设计-为什么最小化后Panel就超出主界面范围

问题描述

为什么最小化后Panel就超出主界面范围

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大小变成了主面板的大小了。原因不知道。

时间: 2024-09-22 15:16:23

界面设计-为什么最小化后Panel就超出主界面范围的相关文章

初学者求教,请问JPanel所绘制的图形如何在最小化后保持?

问题描述 自己编了一个五子棋游戏,用JPanel绘制了棋子,但是在最小化或者有其他对话框覆盖棋子后,棋子就消失了!请各位帮忙!谢谢!代码如下importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;publicclassGoextendsJPanelimplementsMouseListener{staticintarray[][]=newint[15][15];staticintcounter=0;publicstaticintju

有关winform,将一个窗体最小化后再显示会重新绘画窗体吗?

问题描述 有关winform,将一个窗体最小化后再显示会重新绘画窗体吗? 小白,刚接触这方面.在用一个窗体时遇到的问题. 我在这个窗体上画了几个形状,当我把窗体最小化后,再度点开,窗体就会重新初始化重新绘制,之前画的几个形状就没有了.这是winform的特性吗?又没有什么办法让窗体最小化后之前画的图依旧存在? 解决方案 参考这个帖子:http://bbs.csdn.net/topics/80143504 解决方案二: 吧绘画函数放到 override OnPaint 函数里,这样每次窗口需要重画

关于窗口最小化后、还原的问题

问题描述 需求:我自己写的一个程序(暂且叫From1),来调用第三方程序(aaa.exe)第三方程序的主画面的某个button按下后会呼出一个popUp画面,此时主画面关闭,只剩下popUp画面.然后popUp画面上按下最小化按钮.此时,在任务栏上有个矩形的"图标按钮"(别理解错了,不是指托盘图标).问题:在我的程序上怎么实现,让这个第三方程序的popUp画面显示成最小化按钮按下前popUp画面显示的状态.这里有个神奇的现象,如果你按任务栏上的"图标按钮"进行最小化

swing 窗口最小化后布局改变

问题描述 用SWING写了一个界面,整个是一个JSplitPane,分为左右两部分,左边是一棵导航树,右边又是一个JSplitPane,分为上下两部分.每次启动后点击左边导航树节点,更新右边上下的界面,最小化后再最大化就只剩下右下角的界面.请高手指点.部分代码:privatevoidrefreshUI(){rightPane.removeAll();rightPane.add(settingPanel,JSplitPane.TOP);rightPane.add(listPane,JSplitPa

ios-应用最小化后调用方法

问题描述 应用最小化后调用方法 在应用最小化后调用方法. 比如,在调用了applicationDidEnterBackground:之后五秒钟实现. 我用的代码test没成功: - (void)test { printf("Take a photo"); } - (void)applicationDidEnterBackground:(UIApplication *)application { [self performSelector:@selector(test) withObje

visual studio 2010-vs2010 新建项目不出现编辑框 最小化后再打开 却出现了编辑框

问题描述 vs2010 新建项目不出现编辑框 最小化后再打开 却出现了编辑框 vs2010 新建项目不出现编辑框 最小化后再打开 却出现了编辑框,求大神帮忙解决,谢谢!! 解决方案 截个图看看你在说什么 解决方案二: 新建项目后 编辑框不能及时显示 我点"最小化"后,再 打开 编辑框就可以显示了, 这两项都已经勾选了, 谢谢帮忙. @有_道_是 解决方案三: 建立项目的编辑框?还是文件编辑框? 建立空项目,没有源文件,是不会打开文本编辑框的.

.net 主窗口最小化后屏幕区域出现影像错乱

问题描述 .net 主窗口最小化后屏幕区域出现影像错乱 用vb.net写了一个监控程序,在tablelayoutpanel 中加入了多个模块化的自定义控件,自定义控件带有timer定时刷新,平时最大化应用没出现过什么问题,但是当有其他窗口覆盖或者当该程序最小化之后,原来的自定义控件区域(此时该区域应该不存在焦点之类的问题)就会出现匪夷所思的影像错乱,若果点击该区域的图标位置也会出现失焦. 如图,此时监控程序最小化,同时打开我的文档(为当前活动窗口),黑块部分是原监控程序最大化时tablelayo

C#窗口最小化后还原窗口时TableLayoutPanel画屏

问题描述 如题所示,C#窗口最小化后还原窗口时TableLayoutPanel里面所有的东西都花了盼望大神指点. 解决方案 解决方案二:自己顶一下,求大神指点解决方案三:控件放多了吧.导至刷不过来了.解决方案四:如图所示,就那么几个,不至于太多吧最下面那个表格还是另一个自定义空间呢解决方案五:什么花?是闪烁吗?http://www.cnblogs.com/wuhenke/archive/2012/09/26/2704081.html解决方案六:引用4楼ajianchina的回复: 什么花?是闪烁

在MDI窗体中,如何把最小化的子窗体放在主窗体的状态栏上

问题描述 在MDI窗体中,如何把最小化的子窗体放在主窗体的状态栏上 解决方案 解决方案二:下面的代码只是实现你上面说的要求.如果要求点击状态栏上的按钮,再把窗体show出来,还需要在下面代码的基础上再扩展.主要的思路就是,在父窗体能处理子窗体的最小化事件.//先建一个FormBase的基类,子窗体都从这个基类继承publicclassFormBase:System.Windows.Forms.Form{publicdelegatevoidFormMinSize(objectsender,Even