簡體   English   中英

如何調整此Java應用程序的大小時,我該如何監聽?

[英]How can I listen for when this Java app is resized?

我有這個基本的Java應用程序,巫婆dim_xdim_y代表窗口的尺寸和它內部的畫布。 如何在用戶更改窗口大小時更改這些值,以便畫布上繪制的內容相應縮小/擴展?

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

添加組件偵聽器,並實現componentResized 看這里

frame.addComponentListener(new ComponentListener(){
    @Override
    public void componentResized(ComponentEvent e) {
        //Get size of frame and do cool stuff with it   
    }
}
  1. 不要在沒有充分理由的情況下混合AWT和Swing組件(這種使用不是很好的理由)。 您可以使用JComponentJPanel代替Canvas
  2. 這里沒有用於檢測調整大小的用例。 如果調整UI的大小,將調用自定義渲染組件的paint()paintComponent() ,您可以簡單地使用getWidth() / getHeight()來發現渲染區域的大小。

根據我的經驗,當AWT Canvas嵌套在JPanel中時,Canvas的paint()方法在窗口展開時調用,而不是在縮小窗口時調用。 因此,Canvas可以成長但不會縮減。 我使用JComponent的子類重構了子類化的Canvas。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM