在GUI中组织其他组件。但无边框,丌能做独立窗口。 以Jpanel为例,给一个曾经的实例
//MyPanel.java
import java.awt.*
import javax.swing.*
import java.util.Random
public class MyPanel extends JPanel {
private Circle circle[]
public MyPanel() {
setBackground(Color.black) // 面板背景色
setPreferredSize(new Dimension(600,450)) // 面板大小
int numCircle=new Random().nextInt(6)+5
//int numCircle=circle.length
circle=new Circle[numCircle]
for(int i=0i<numCirclei++){ // 创建圆的实例
Color color=new Color(new Random().nextInt(256),new Random().nextInt(256),new Random().nextInt(256))
circle[i]=new Circle(new Random().nextInt(50)+10,color,new Random().nextInt(420)+61,new Random().nextInt(320)+61)
}
}
/* 每个JPanel对象都有painComponent方法,绘制添加在容器上的组件, 在
* 组件首次显示或重新显示时被自动调用。
*/
public void paintComponent(Graphics g) {
super.paintComponent(g)
// 调用父类方法, 清空画布,绘制背景色
setFont(new Font ("Times New Roman",Font.BOLD,20)) // 设置字体
g.setColor(Color.pink)
g.drawString("Hello World!",250,200)
for(int i=0i<circle.lengthi++){
circle[i].draw(g)
}
}
}
//Circle.java
import java.awt.*
/**此类定义了绘制圆的基本方法
*@author JF
*@version 1.0
*/
public class Circle {
// 直径和圆外接正方形左上角坐标
private int diameter,x,y
// 指定圆的大小和位置
private Color color // 颜色
public Circle(){
}
/**构造函数,设置圆类的属性
*@param int diameter,Color color,int x,int y
*@return none
*/
Circle(int diameter,Color color,int x,int y ){
this.diameter=diameter
this.color=color
this.x=x
this.y=y
}
/**填充圆类
*@param Graphics
*@return none
*/
public void draw(Graphics g){
g.setColor(color)
g.fillOval(x,y,diameter,diameter)
}
}
//MyCircle.java
import javax.swing.*
public class MyCircle{
public static void main(String[] args){
JFrame f=new JFrame("Circle")
f.setVisible(true)
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
f.getContentPane().add(new MyPanel())
f.pack()
}
}
import javax.swing.*
public class baiduzhidao1 {
public static void main(String args[]){
ImageIcon img = new ImageIcon("1.jpg")/*负责显示图像的JLable对象j1*/
JLabel jl = new JLabel(img)
JPanel j = new JPanel() /*在JFrame上add上面板j*/
JFrame jf = new JFrame()
jf.setContentPane(j)
j.add(jl) /*在面板j上add上JLable对象j1*/
JPanel jjj = new JPanel() /*创建一个透明的面板放在JLable对象j1上负责放控件,此例中放置了一个按钮*/
jl.add(jjj)
jjj.setSize(200, 100) /*这里注意要设置大小*/
jjj.setOpaque(false) /*将负责放置控件的面板设置成透明,详细请查API*/
jjj.add(new JButton("确定")) /*添加按钮*/
jf.setVisible(true)
jf.setSize(500, 300)
}
}
容器从顶层开始顺序如下:
jf(JFrame对象实例) -->j (JPanel对象实例,无须设置透明) -->j1(JLable对象实例,负责显示图片)
-->jjj(JPanel对象实例,负责放置控件,需要设置成透明才不会让自身的底色覆盖了上层图片)
可以这样理解吧:就是pane是java中的一个控件,是不具备包含其他控件的功能的;而panel虽然也是一个控件,但是它还有一个身份就是布局,它可以管理其他的控件。如果做过android开发的话,理解起来可能要容易一些。