【问题标题】:JInternalFrame Icon moves below JPanel when minimized最小化时 JInternalFrame 图标移动到 JPanel 下方
【发布时间】:2012-10-20 02:32:43
【问题描述】:

我正在尝试设计一个小游戏,并使用 JInternalFrame 来显示库存。我遇到的问题是,当我最小化 InternalFrame 时,左下角的图标会自动隐藏在 JPanel 后面,该 JPanel 也添加到 JDesktopPane 中。当我向下拖动窗口(使窗口垂直变大)时,白色的 DesktopPane 在默认的灰色 JPanel 下方可见。此外,当我向下拖动时,会显示 InternalFrame 的图标。我试图发布图片,但我是该网站的新手,所以我不能:(。

我尝试使用 moveToFront() 和 toFront() 方法,并尝试覆盖 InternalFrameListener 以图标化框架,但没有任何效果。如果您认为我使用了糟糕的设计,请随时告诉我 - 我只是一名学生,对常用实践了解不多。

这是我的代码

public class GameTester extends JFrame {

    private JDesktopPane pane;
    private Inventory i; //class that extends JInternalFrame

    public static void main(String[] args) {
        GameTester frame = new GameTester();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(1280, 720);
    }       

    public GameTester() {
        setFocusable(true);
        i = new Inventory("Inventory");

        GamePanel g = new GamePanel();
        g.setBounds(0, 0, 1280, 720);

        pane = new JDesktopPane();
        pane.add(i);
        setContentPane(pane);
        getContentPane().add(g);            
        }
}

【问题讨论】:

    标签: java swing jpanel jinternalframe jdesktoppane


    【解决方案1】:

    如何尝试这样的事情:

    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import javax.swing.JDesktopPane;
    import javax.swing.JFrame;
    import javax.swing.JInternalFrame;
    import javax.swing.JPanel;
    
    
    public class GameStarter extends JFrame {
    
        private JDesktopPane pane = new JDesktopPane();
        private JInternalFrame i = new JInternalFrame(); 
    
        private JPanel panel = new JPanel();
    
        public static void main(String[] args) {
            GameStarter frame = new GameStarter();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(1024,768);
            frame.setVisible(true);
        }       
    
        public GameStarter() {
            setLayout(new BorderLayout());
            i.setClosable(true);
            i.setIconifiable(true);
            i.setMaximizable(true);
            i.setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);
            i.setSize(320,240);
            i.setVisible(true);
            pane.setPreferredSize(new Dimension(1024,320));
            pane.setBackground(Color.GRAY);
            pane.add(i);    
            panel.setBackground(Color.YELLOW);
    
            add(pane,BorderLayout.SOUTH);
            add(panel,BorderLayout.CENTER);
        }
    }
    

    我个人认为在JDesktopPane 上添加JPanel 的想法很糟糕。

    【讨论】:

    • @MadProgrammer 谢谢!我建议他制作自己的框架(在 JPanel 上绘制带有文本的矩形(这些将是选项),拖动鼠标时可移动),但我认为这对他作为初学者来说很难。
    • 我猜你可以建议使用JLayeredPane,但很难弄清楚为什么 OP 会走上这条路……
    • 感谢 MadProgrammer,我只是继续抓挠桌面窗格。我正在使用 JLayeredPane,它运行良好。我没有使用窗口按钮来控制框架,而是将其绑定。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-22
    • 1970-01-01
    • 2013-01-30
    相关资源
    最近更新 更多