java - 我如何监听此 Java 应用程序何时调整大小?

标签 java swing events listener awt

我有这个基本的 Java 应用程序,其中 dim_xdim_y 代表窗口及其内部 Canvas 的尺寸。当用户更改窗口大小时,如何使这些值发生变化,以便 Canvas 上绘制的内容相应缩小/扩展?

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class MLM extends Canvas {
    static int dim_x = 720;
    static int dim_y = 480;

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Canvas canvas = new MLM();
        canvas.setSize(dim_x, dim_y);
        frame.getContentPane().add(canvas);

        frame.pack();
        frame.setVisible(true);
    }

    public void paint(Graphics g) {
        // some stuff is drawn here using dim_x and dim_y
    }
}

编辑: 按照 Binyamin 的回答,我尝试添加这个有效的方法,但是有更好的方法吗?比如,不使 canvas 静态,也许?

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class MLM extends Canvas {
    static int dim_x = 720;
    static int dim_y = 480;
    static Canvas canvas;

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        canvas = new MLM();
        canvas.setSize(dim_x, dim_y);
        frame.getContentPane().add(canvas);

        frame.pack();
        frame.setVisible(true);

        frame.addComponentListener(new ComponentListener(){
            public void componentResized(ComponentEvent e) {
                Dimension d = canvas.getSize();
                dim_x = d.width;
                dim_y = d.height;
            }
            public void componentHidden(ComponentEvent e) {}
            public void componentMoved(ComponentEvent e) {}
            public void componentShown(ComponentEvent e) {}
        });
    }

    public void paint(Graphics g) {
        // some stuff is drawn here using dim_x and dim_y
    }
}

最佳答案

添加组件监听器,并实现componentResizedLook here .

frame.addComponentListener(new ComponentListener(){
    @Override
    public void componentResized(ComponentEvent e) {
        //Get size of frame and do cool stuff with it   
    }
}

关于java - 我如何监听此 Java 应用程序何时调整大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9267574/

相关文章:

java - 在 Java Swing 中,当工作流程非线性时如何在 JPanel 之间切换?

java - 使用JTree获取Java中每个子类和兄弟类的名称

java - JTable 单元格未通过定期更新进行更新

java - JFrame 背景图像不起作用

c++ - 有没有办法在没有 QApplication::exec() 的情况下使用 Qt?

java - 从字符串中删除字符所需的建议

java - 在多维数组中设置字符串

java - 如何使用jaxb获取anyType值?

javascript - 指令内未触发滚动事件 - angular.js

javascript - jQuery.load() : loading a div when click