组件中显示信息
JFrame结构复杂,由四层窗格,其中根窗格、层级窗格和玻璃窗格人们并不太关心,他们要用来组织菜单栏和内容窗格以及实现观感,Swing程序员最关心的是内容窗格(content pane),添加到窗体的所有组件都会自动添加到内容窗格中。
JFrame的内部结构
将一个组件添加到窗体中,消息将绘制在这个组件上,要在一个组件上绘制,需要定义一个拓展JComponent的类,并覆盖其中的paintComponent方法。此方法只有一个Graphics类型的参数,对于屏幕来说,画笔对象的度量单位是像素,坐标(0,0)指示所绘制组件的的左上角。
案例如下:
java
package notHelloWorld;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import javax.swing.JComponent;
import javax.swing.JFrame;
public class NotHelloWorld {
public static void main(String[] args) {
EventQueue.invokeLater(()->{
var frame = new NotHelloWorldFrame();
frame.setTitle("非你好世界");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
});
}
}
class NotHelloWorldFrame extends JFrame {
public NotHelloWorldFrame() {
add(new NotHelloWorldComponent());
pack();
}
}
class NotHelloWorldComponent extends JComponent {
public static final int MESSAGE_X = 75;
public static final int MESSAGE_Y = 100;
private static final int DEFAULT_WIDTH = 300;
private static final int DEFAULT_HEIGHT = 200;
//画字符串
@Override
protected void paintComponent(Graphics g) {
g.drawString("不是你好世界程序", MESSAGE_X, MESSAGE_Y);
}
//尺寸,参考大小
@Override
public Dimension getPreferredSize() {
return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT);
}
}
javax.swing.JFrame 1.2
- Component add(Component c),将一个给定的组件添加到该窗体的内容窗格中,并返回这个组件。
java.awt.Component 1.0
- void repaint(),尽可能快的重新绘制组件
- Dimension getPreferredSize(),覆盖这个方法,以返回这个组件的首选大小。
javax.swing.JComponent 1.2
- void paintComponent(Graphics g),覆盖这个方法来描述需要如何绘制组件
java.awt.Window 1.0
- void pack(),调整窗口大小,要考虑其组件的首选大小。