高手能否写一个如下的例子:JFrame的一个窗口,里面一个JLabel显示窗口的大小。
每次用户拖动窗口的时候,更新JLabel的数值。谢谢。
每次用户拖动窗口的时候,更新JLabel的数值。谢谢。
解决方案 »
- swing问题
- 一个关于java io的问题
- 求救,急jsp+flash实现.swf文件的播放
- 请教:哪位仁兄可否给我展示一下Java程序中造成Memory Leak的情况
- 将file1.txt复制到file2.txt中,源文件名和目标文件名作为命令行参数输入?
- 请问如何得到调用该类的对象
- System.exit(0),System.exit(1),System.exit(2)...里的0、1、2是什么意思呀
- 使用 Forte 的一个小问题
- 我的也被删了!!!!!!!!!!!!!!!!!投诉!!!!!!!!!!!!!!!!!!11
- How to use the "plug_in " of jdk1.2 in IE and Netscapor?
- 如何获取x.509标准证书中的颁发机构密钥标识符
- 一个C/S软件的设计
import java.awt.event.*;public class Test {
public static void main(String[] args) {
final JFrame frame = new JFrame();
frame.setSize(400, 300);
final JLabel label = new JLabel();
frame.add(label);
frame.addComponentListener(new ComponentAdapter() {
public void componentResized(ComponentEvent e) {
label.setText(frame.getWidth() + "," + frame.getHeight());
}
});
frame.setVisible(true);
}
}这个是每次拖动完放开鼠标以后才显示数字的
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.awt.event.WindowStateListener;import javax.swing.JFrame;
import javax.swing.JLabel;
public class MainFrame extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
private JLabel label = null;
public void sizeChanged(int width, int height) {
String msg = String.format("Width: %d ; Height: %d", this.getWidth(), this.getHeight());
label.setText(msg);
}
public void init() {
String msg = String.format("Width: %d ; Height: %d", this.getWidth(), this.getHeight());
label = new JLabel(msg);
this.add(label);
}
public static void main(String[] args) {
final MainFrame mframe = new MainFrame();
mframe.addComponentListener(new ComponentListener() {
@Override
public void componentShown(ComponentEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void componentResized(ComponentEvent arg0) {
mframe.sizeChanged(arg0.getComponent().getWidth(), arg0.getComponent().getHeight());
}
@Override
public void componentMoved(ComponentEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void componentHidden(ComponentEvent arg0) {
// TODO Auto-generated method stub
}
});
mframe.init();
mframe.setVisible(true);
}
}
frame.addComponentListener(
这里。
当窗口大小改变之后,是怎样重新绘制的窗口呢?
不需要使用paintComponent或者repaint这样的函数吗?
谢谢。
import java.awt.event.*;
import java.awt.*;public class Test {
public static void main(String[] args) {
final JLabel label = new JLabel();
final JFrame frame = new JFrame();
JPanel panel = new JPanel() {
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
label.setText(frame.getWidth() + ", " + frame.getHeight());
}
};
panel.setLayout(new BorderLayout());
frame.setContentPane(panel);
frame.setSize(400, 300);
frame.add(label);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}不过这样刷新JLabel比较频繁。窗口大小改变时,Swing的调度线程自然会调用paintComponent方法,不用程序员完成调用。