GUI入门(Swing包)
1.1GUI的概述
图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。 [1]
图形用户界面是一种人与计算机通信的界面显示格式,允许用户使用鼠标等输入设备操纵屏幕上的图标或菜单选项,以选择命令、调用文件、启动程序或执行其它一些日常任务。与通过键盘输入文本或字符命令来完成例行任务的字符界面相比,图形用户界面有许多优点。图形用户界面由窗口、下拉菜单、对话框及其相应的控制机制构成,在各种新式应用程序中都是标准化的,即相同的操作总是以同样的方式来完成,在图形用户界面,用户看到和操作的都是图形对象,应用的是计算机图形学的技术。
1.2JAVA针对GUI提供了三个包
java.awt 包 – 主要提供字体/布局管理器
javax.swing 包[商业开发常用] – 主要提供各种组件(窗口/按钮/文本框)
java.awt.event 包 – 事件处理,后台功能的实现。
1.3 Swing包下面的类及其作用
A.两者大致相同但Swing类提供了一些AWT没有的功能
1.3.1窗口类JFrame
package Swing;
import A.J;
import javax.swing.*;
public class JF {
public static void main(String[] args) {
JFrame jf = new JFrame("我的JFrame窗口");
jf.setBounds(200,200,200,200);
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//设置窗口可关闭
//给窗口设置一段文字
JLabel label = new JLabel("你好世界");
jf.add(label);//把文字加入到窗口中
}
}
1.3.2 弹窗JDialog
定义:点击这个按钮会弹出另一个出口
重点:弹窗的窗口必须继承弹窗类、
package Swing;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Diagotest {
public static void main(String[] args) {
new diago();
}
}
class diago extends JFrame{
public diago(){
setBounds(200,200,200,200);
setVisible(true);
setDefaultCloseOperation( WindowConstants.EXIT_ON_CLOSE );//设置窗口关闭事件
Container container =getContentPane();//设置一个容器 可以看作是JFRAME的实例化
container.setLayout(null);//采用绝对布局
JButton jButton = new JButton("点击按钮弹出弹窗");//创建一个按钮
jButton.setBounds(50,50,50,50);
//增加按钮监听时间
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new tanchuang();
}
});container.add(jButton);//把弹窗添加到容器中
}
}class tanchuang extends JDialog{
public tanchuang (){
setBounds(100,100,100,100);
setVisible(true);
add(new JLabel("我的弹窗"));
}
}
可能错的地方:JFrame必须实例化一个容器 Container才能将组件加到窗口中去: Container container =getContentPane();//设置一个容器 可以看作是JFRAME的实例化
1.3.4 图片标签
要点://绘制图标需要继承JFrame类并实现ICON接口
package Swing;
import javax.swing.*;
import java.awt.*;
//绘制图标需要继承JFrame类并实现ICON接口
public class Myicon extends JFrame implements Icon {
private int width;
private int heigth;
public Myicon(){}//无参构造
public Myicon(int width,int heigth){
}
public void init (){
Myicon myicon = new Myicon(15,15);//图标可以放在标签上也可以放在按钮上
JLabel icontest = new JLabel("icontest", myicon, SwingConstants.CENTER);
Container contentPane = getContentPane();
contentPane.add(icontest);
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
@Override
public void paintIcon(Component c, Graphics g, int x, int y) {
g.fillOval(x,y,width,heigth);//这里的的g是画笔用来画图标的
}
@Override
public int getIconWidth() {
return this.width;
}
@Override
public int getIconHeight() {
return this.heigth;
}
public static void main(String[] args) {
new Myicon().init();
}
}
把图标放到标签上
package Swing;
import A.N;
import com.sun.org.apache.bcel.internal.generic.NEW;
import javax.swing.*;
import java.awt.*;
import java.net.URL;
public class Image {
public static void main(String[] args) {
new Images();
}
}
class Images extends JFrame{
public Images(){
Container container = getContentPane();
setBounds(200,200,200,200);
JLabel jLabel = new JLabel("做人要做陈冠希");
URL url =Images.class.getResource("1.jpg");//获取图片地址
ImageIcon imageIcon = new ImageIcon(url);//把图片封装一哈
jLabel.setIcon(imageIcon);
jLabel.setHorizontalAlignment(SwingConstants.CENTER);//图片放到中间
add(jLabel,BorderLayout.CENTER);//把标签放到容器中
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
1.3.5单选按钮和多选按钮
A.单选按钮
new 多个个JRadioButton按钮 然后把这些按钮添加到一个ButtonGroup组中
这样便可生成单选按钮
class DAN extends JFrame{
public DAN(){
Container contentPane = getContentPane();
//新建三个按钮
JRadioButton jButton0 = new JRadioButton("00");
JRadioButton jButton1 = new JRadioButton("01");
JRadioButton jButton2 = new JRadioButton("02");
//新建一个按钮分组
ButtonGroup buttonGroup = new ButtonGroup();
buttonGroup.add(jButton0);
buttonGroup.add(jButton1);
buttonGroup.add(jButton2);
contentPane.add(jButton0,BorderLayout.WEST);
contentPane.add(jButton1,BorderLayout.CENTER);
contentPane.add(jButton2,BorderLayout.EAST);
setVisible(true );
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setBounds(200,200,200,200);
}
}
B.多选按钮
new 一些JCheckBox 这些按钮便是多选按钮
class DUO extends JFrame{
public DUO(){
Container contentPane = getContentPane();
JCheckBox jCheckBox1 = new JCheckBox("01");
JCheckBox jCheckBox2= new JCheckBox("02");
contentPane.add(jCheckBox1,BorderLayout.SOUTH);
contentPane.add(jCheckBox2,BorderLayout.NORTH);
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setBounds(200,200,200,200);
}
}