有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

jinternalframe Java内部框架调整大小事件侦听器?

我找不到关于如何捕捉JInternalFrame的“resize”事件的任何信息,我的意思是内部

实际上,InternalFrameListener没有捕获“resize”事件

我应该用“JInternalFrame.addComponentListener(...)”自己写吗


共 (1) 个答案

  1. # 1 楼答案

    是的,您需要使用addComponentListener()JInternalFrame添加一个调整大小的侦听器

    实现这一点的最简洁的方法是使用ComponentAdapter,并且只覆盖componentResized(final ComponentEvent e)方法:

    jInternalFrame.addComponentListener(new ComponentAdapter() {
        @Override
        public void componentResized(final ComponentEvent e) {
            super.componentResized(e);
            System.out.println("Resizing");
        }
    });
    

    看看这个简单完整的例子:

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ComponentAdapter;
    import java.awt.event.ComponentEvent;
    
    public class Example {
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(Example::createFrame);
        }
    
        private static void createFrame() {
    
            JFrame jFrame = new JFrame();
            jFrame.setLocationRelativeTo(null);
    
            JDesktopPane jDesktopPane = new JDesktopPane();
            jDesktopPane.setPreferredSize(new Dimension(600, 600));
    
            JInternalFrame jInternalFrame = new JInternalFrame();
            jInternalFrame.setBackground(Color.BLUE);
            jInternalFrame.setResizable(true);
            jInternalFrame.setSize(new Dimension(300, 300));
            jInternalFrame.setLocation(100, 100);
            jInternalFrame.setVisible(true);
    
            jInternalFrame.addComponentListener(new ComponentAdapter() {
                @Override
                public void componentResized(final ComponentEvent e) {
                    super.componentResized(e);
                    System.out.println("Resizing");
                }
            });
    
            jDesktopPane.add(jInternalFrame);
    
            jFrame.setContentPane(jDesktopPane);
            jFrame.pack();
            jFrame.setVisible(true);
        }
    }