当前位置: 首页 > 知识库问答 >
问题:

Java7调整JFrame(我的GUI)的大小:componentListener没有被激发

洪昊然
2023-03-14
this.addComponentListener(new CL(this, logger));

在componentListener中,我有componentResized等。

public void componentResized(ComponentEvent e) {
    if (e.getSource() == gui) {
       here I do the code
    }
}

在Java6下一切都很好,但在Java7下,Jframe被调整了大小,但没有被重新绘制:组件监听器没有被调用

我尝试了一些来自StackOverflow的编码方式的替代方案,但没有办法使其工作。

public class Frame extends JFrame {
    private JPanel  panel;
    public Frame() {
        super();
        getContentPane().setBounds(new Rectangle(0, 0, 200, 200));
        getContentPane().setLayout(null);
        getContentPane().add(getPanel());
        this.addComponentListener(new ComponentListener() {
            @Override
            public void componentResized(ComponentEvent e) {
                System.out.println("Window Resized: Frame");}
            @Override
            public void componentMoved(ComponentEvent e) {}
            @Override
            public void componentShown(ComponentEvent e) {}
            @Override
            public void componentHidden(ComponentEvent e) {}});
        this.setSize(200, 200);
        this.setPreferredSize(new Dimension(200, 200));
        this.pack();
    }
    public JPanel getPanel() {
        if (panel == null) {
            panel = new JPanel();
            panel.setBackground(Color.RED);
            panel.setBounds(0, 0, 200, 200);
            panel.setPreferredSize(new Dimension(200, 200));
        }
        return panel;
    }
}

这是启动类:

public class StartUp {
    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
        } catch (Exception e) {
            e.printStackTrace();
        }
        Frame app = new Frame();
        app.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        app.pack();
        app.setVisible(true);
    }
}

在Java6下运行时,您会得到“window resizize:frame”消息。
在Java7下运行时,完全没有消息。

下面是两个图片链接:

    null
    null

共有1个答案

干稳
2023-03-14

>

  • 您的代码(在移除镇流器之前,改为标准)对我来说是正确的

    ComponentListener从每个像素触发一个事件

    这是componentresize()的基本属性,否则需要swingtimer.restart()untill resize ended)

    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.EventQueue;
    import java.awt.event.ComponentAdapter;
    import java.awt.event.ComponentEvent;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.UIManager;
    
    public class MyFrame {
    
        private JFrame frame = new JFrame();
        private JPanel panel;
    
        public MyFrame() {
            frame.add(getPanel());
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.pack();
            frame.setVisible(true);
            frame.addComponentListener(new ComponentAdapter() {
                @Override
                public void componentResized(ComponentEvent e) {
                    System.out.println("Window Resized: Frame");
                }
            });
        }
    
        public JPanel getPanel() {
            if (panel == null) {
                panel = new JPanel() {
                    @Override
                    public Dimension getPreferredSize() {
                        return new Dimension(300, 200);
                    }
                };
                panel.setBackground(Color.RED);
            }
            return panel;
        }
    
        public static void main(String[] args) {
            try {
                UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
            } catch (Exception e) {
                e.printStackTrace();
            }
            EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    MyFrame app = new MyFrame();
                }
            });
        }
    }
    

  •  类似资料:
    • 我制作了一个包含三个jpanel的jframe,这三个panel将jframe分成三个相等的部分。每一个面板都包含一个图像。我想调整图像和面板的大小,当帧的大小从高到低的时候。有人能告诉我如何做吗。

    • 问题内容: 我是Java的新手,开始学习挥杆技巧,并且在JFrame中调整JPanel的大小时遇到​​问题。我正在关注本教程: http://vincentramdhanie.blogspot.com/2009/11/cardlayout-with- netbeans.html 因为最终我将学习每种不同的布局,并且现在已经进入CardLayout。在上面,有一个JPanel用于状态面板。那也是我想

    • 我是Java新手,开始学习swing,在JFrame中调整JPanel的大小时遇到问题。我将学习本教程: http://vincentramdhanie.blogspot.com/2009/11/cardlayout-with-netbeans.html 因为最终我正在学习每一种不同的布局,现在我来到了CardLayout。在上面,有一个JPanel用于状态面板。这也是我想要做的,但是当我将一个J

    • 我似乎无法调整这个iframe的大小 为了简单起见,我没有包括几个包装div,因为它们只用于样式。然而,上面的两个外部div位于flexbox的div中,因此它们是水平显示的,而不是占据整个水平空间。我将内容div设置为100%的宽度,第一个div设置为固定宽度。如你所见,iframe也从硬编码的固定宽度/高度开始。还要注意,重置iframe的src在js函数中起作用,而不是宽度和高度。 谢谢你

    • 作为学习的一部分,我在一个简单的swing应用程序中制作了一个JPanel。我把它弄得没装饰。现在只显示了一个JPanel。我应用了组件移动和添加关闭按钮到这个面板,但面板的大小是固定的。 如何使JPanel可调整大小? 包X;公共类TestRun扩展javax.swing.jframe{ }

    • 我对JPanel和JFrame还是个新手,可能没有按照我应该的方式使用它们。我正在尝试创建Pong游戏,在创建JFrame并将JPanel添加到它之后,我可以调整JPanel的大小,但我不知道如何调整JFrame的大小以适应它。Game类扩展了JPanel。 主: 编辑: 将setSize更改为setPreferredSize,然后为JFrame调用pack()就可以解决所有问题。