Java 7调整JFrame的大小(我的GUI):componentListener未被触发 [英] Java 7 resize a JFrame (my GUI): the componentListener is not getting fired

查看:65
本文介绍了Java 7调整JFrame的大小(我的GUI):componentListener未被触发的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Google周围搜索,找不到答案:

I've Googled around and could not find an answer:

我有一个JFrame作为GUI,并设置了

I have a JFrame as a GUI and set a componentListener like

this.addComponentListener(new CL(this, logger));

在componentListener中,我有componentResized,等等...

In the componentListener I have the componentResized, etc...

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

在Java 6下一切正常,但是在Java 7下,Jframe的大小已调整,但未重绘:组件侦听器未得到调用

Everything is working fine under Java 6, but under Java 7, the Jframe is being resized but is not being repainted: the component listener is not getting called

我尝试了StackOverflow的一些替代方法,但没有办法使其发挥作用.

I tried some alternatives from StackOverflow in the way of coding, but no way to make it work.

当我最小化GUI窗口并还原它时,就会调用"componentResized".

When I minimize the GUI window and restore it, then "componentResized" is being called.

任何人都知道发生了什么,以及为什么它可以在Java 6而不是Java 7下工作.

Anyone an idea what's going on and why it works under Java 6 and not Java 7.

这是示例代码:

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);
    }
}

在Java 6下运行时,您会收到窗口大小已调整:框架"消息.
在Java 7下同样运行,根本没有消息.

When run under Java 6 you get the "Window Resized: Frame" message.
The same run under Java 7, no messages at all.

以下是指向图片的2个链接:

Below are 2 links to Pictures:

  • Java 6

Java 6框架图像

  • Java 7

Java 7框架图像

推荐答案

  • 您的代码(在删除balast之前,已更改为标准)对我来说正常

    • your code (before balast removed, changed to standard) work for me correctly

      ComponentListener从每个像素触发事件

      这是componentResized()的基本属性,否则需要SwingTimer.restart()直到调整大小为止)

      this is basic property of componentResized(), otherwise required SwingTimer.restart() untill resize ended)

      镇流器已移除,已更改为标准

      balast removed, changed to standard

      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();
                  }
              });
          }
      }
      

      这篇关于Java 7调整JFrame的大小(我的GUI):componentListener未被触发的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆