【问题标题】:Window resize event?窗口调整大小事件?
【发布时间】:2010-02-20 19:08:47
【问题描述】:

我正在使用 Java 编写一个简单的绘画程序,并且我希望在调整 JFrame 组件大小时调用一些方法。但是我找不到像 windowResizedListener 这样的方法或像 windowResizedEvent 这样的事件。 我该怎么办?!

【问题讨论】:

    标签: java swing


    【解决方案1】:

    用componentResized() 实现ComponentAdapter:

    frame.addComponentListener(new ComponentAdapter() {
        public void componentResized(ComponentEvent componentEvent) {
            // do stuff
        }
    });
    

    【讨论】:

    • 为了避免必须实现ComponentListener的所有方法,请改用ComponentAdapter。
    【解决方案2】:

    覆盖ComponentAdapter 的特定方法是实现ComponentListener 的所有方法的便捷替代方法。看到here 的几个示例说明了API 中提到的“创建侦听器对象的便利性”。

    【讨论】:

      【解决方案3】:

      您必须使用来自ComponentListener 的componentResized。

      【讨论】:

        【解决方案4】:

        ComponentAdapter 示例

        //Detect windows changes
        window.addComponentListener(new ComponentAdapter( ) {
          public void componentResized(ComponentEvent ev) {
           label.setText(ev.toString());
          }
        });
        

        【讨论】:

          【解决方案5】:

          为了访问窗口调整大小方法事件,我在子类中实现了ComponentListener。这是一个自定义 JPanel 类,可用于将窗口大小写入 GUI 内的 JLabel。只需在您的 main 方法中实现这个类并将其添加到您的 JFrame 中,您就可以调整窗口大小,它会动态地显示您窗口的像素大小。 (注意你必须将你的 JFrame 对象添加到 Class 中)

          package EventHandledClasses;
          import javax.swing.*;
          import java.awt.*;
          import java.awt.event.ComponentListener;
          public class DisplayWindowWidth extends JPanel{
          JLabel display;
          JFrame frame;
          public DisplayWindowWidth(JFrame frame){
                  display = new JLabel("---");
                  this.frame = frame;
              
                  frame.addComponentListener(new FrameListen());
                  add(display);
                  setBackground(Color.white);
              }
          
              private class FrameListen implements ComponentListener{
                  public void componentHidden(ComponentEvent arg0) {
                  }
                  public void componentMoved(ComponentEvent arg0) {   
                  }
                  public void componentResized(ComponentEvent arg0) {
                      String message = " Width: " +
                      Integer.toString(frame.getWidth());
                      display.setText(message);
                  
                  }
                  public void componentShown(ComponentEvent arg0) {
                  
                  }
              }
          }
          

          【讨论】:

            猜你喜欢
            • 2014-04-06
            • 1970-01-01
            • 2010-10-13
            • 2017-04-26
            • 2018-12-13
            • 2016-06-02
            相关资源
            最近更新 更多