那什么是JPanel?Jframe 又是什么呢?让我们先来了解一下他们的区别吧:
Jframe是最底层,JPanel是置于其面上,同一个界面只有一个Jframe,一个Jframe可以放多个JPanel。如果你直接在Jframe上放也可以,但是首先不规范,然后要是过于复杂的界面你准备如何处理这么多控件呢?
对于java页面的布局,我的理解就是Jframe 就像是一张大的桌子,你可以直接把鱼呀,肉了,直接放在桌面上,没有盘子进行分类管理,这时我们就需要jpanel这样的盘子来放我们需要的一些控件。便于管理。
那接下来让我们首先使用JPanel 和 Jframe画一个圆:
Jframe 就相当于是一个窗口,你也可以把它理解成是一个画框,而此时JPanel 就相当于是一个画板,通常继承 JPanel 类的面板通过重写paint()方法进行绘图
package huitu.com;
import javax.swing.*;
import java.awt.*;
@SuppressWarnings({"all"})
public class DrawingTest01 extends Jframe{// Jframe(框架)对应窗口,可以理解成是一个画框
// 演示如何在面板上画出圆形
// 定义一个面板
private MyPanel mp=null;
public static void main(String[] args) {
new DrawingTest01();
}
public DrawingTest01() {
// 初始化面板
mp = new MyPanel();
// 把面板放到窗口(画框)
this.add(mp);
//设置窗口大小
this.setSize(400,300);
this.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);// 当退出画框就退出程序
this.setVisible(true);// 可以显示
}
}
// 1. 先定义一个MyPanel(面板),继承JPanel 类,画图形就在该面板上画
class MyPanel extends JPanel{
@Override
public void paint(Graphics g) {// 绘图方法
super.paint(g);// 调用父类的方法完成初始化
// 画出一个圆形
g.drawOval(100,100,100,100);
}
}
效果演示:
注意: 所画图形的大小是以窗口大小为参考系的,如果设置值大于了窗口大小,那我们是看不到完整的图形的,就好比你把画画得超出了画框,这种结果是非常不理想的
那么通过对Jframe 和JPanel 的初步了解,接下来让我们来看看他的一些主要方法和绘制各种各样的图形吧
package huitu.com;
import javax.swing.*;
import java.awt.*;
public class DrawingTest02 extends Jframe{
private MyPanel_ mp = null;
public static void main(String[] args) {
new DrawingTest02();
}
public DrawingTest02() {
// 初始化面板
mp = new MyPanel_();
// 把面板放到窗口(画框)
this.add(mp);
//设置窗口大小
this.setSize(1000, 600);
this.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);// 当退出画框就退出程序
this.setVisible(true);// 可以显示
}
}
class MyPanel_ extends JPanel{
@Override
public void paint(Graphics g) {// 绘图方法
super.paint(g);// 调用父类的方法完成初始化
// 绘制不同的图形
//1.画直线drawLine(int x1, int y1, int x2, int y2)
g.drawLine(10,10,100,100);// 确定两点坐标
//2.画矩形边框 drawRect(int x, int y, int width, int height)
g.drawRect(10,10,100,100);
// g.draw3DRect(); 3D
// 3.画椭圆边框 drawOval(int x, int y, int width, int height)
g.drawOval(10,10,100,100);
//4.填充矩形 fillRect(int x, int y, int width, int height)
// 设置画笔颜色
g.setColor(Color.red);
g.fillRect(40,50,100,100);
// 5.填充椭圆 fillOval(int int int width, int height)
g.setColor(Color.orange);
g.fillOval(100,100,100,200);
// 6.画图片 drawImage(Image img, int x,int y,..)
// 1. 加载图片资源(获取图片资源)
Image image = Toolkit.getDefaultToolkit().getImage("D:\风耀.jpg");
g.drawImage(image,270,100,324,462,this);
// 7.画字符串 drawString(String str,int x, int y)
g.setColor(Color.BLUE);
g.setFont(new Font("隶书",Font.BOLD,50));// 隶书 ,粗体,大小
g.drawString("为战而生,至死方休",220,80);
// 8.设置画笔的字体setFont(Font font)
// 9.设置画笔的颜色setColor(Color)
}
}
效果演示:
另外还有一种插入图片的方式:
重写paintComponent()方法其触发调用的机制和paint()方法相同
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
// 6.画图片 drawImage(Image img, int x,int y,..)
// 1. 加载图片资源(获取图片资源)
Image image = Toolkit.getDefaultToolkit().getImage("D:\风耀.jpg");
g.drawImage(image,270,100,324,462,this);
}
当然我只是展示了其中一部分方法,其他的方法大家可以通过观看javaAPI查看 ,这也只是java图形界面设计的一点点基础,更多的创作思路还需要大家亲自去体验



