[英]How can I listen for when this Java app is resized?
我有這個基本的Java應用程序,巫婆dim_x
和dim_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
}
}
JComponent
或JPanel
代替Canvas
。 paint()
或paintComponent()
,您可以簡單地使用getWidth()
/ getHeight()
來發現渲染區域的大小。 根據我的經驗,當AWT Canvas嵌套在JPanel中時,Canvas的paint()方法在窗口展開時調用,而不是在縮小窗口時調用。 因此,Canvas可以成長但不會縮減。 我使用JComponent的子類重構了子類化的Canvas。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.