一、Java Swing 简介
Java Swing 是 Java 为 图形界面应用开发提供的一组工具包,是Java基础类的一部分。 Swing 包含构建图形界面(GUI)的各种组件,如:窗口、标签、按钮、文本框等,这些构成图形界面的元素(组件),包含在 javax.swing.* 包下,类名通常是以J开头,如JFrame,JButton等。组件是Java Swing开发中最基本的部分,也是我们重点要学习的一部分。
二、Java Swing 组件
什么是组件? 组件就是组成图形界面的各种元素,如按钮、窗口、文本框等。在Java Swing 中我们如果按照类对组件进行划分,其结构层次如下。
如果按照功能进行划分,可分为顶层容器、中间容器和基本组件。
其中顶层容器包括
组件 | 功能 |
---|---|
JFrame | 窗口(绝大多数 Swing 图形界面程序使用 JFrame 作为顶层容器) |
JDialog | 对话框 |
中间容器包括
组件 | 功能 |
---|---|
JPenel | 面板 |
JTabbedPane | 选项卡面板 |
特殊的中间容器
组件 | 功能 |
---|---|
JMenuBar | 菜单栏 |
JToolBar | 工具栏 |
JPopMenu | 弹出菜单 |
基本组件包括
组件 | 功能 |
---|---|
JLabel | 标签 |
JButton | 按钮 |
JCheckBox | 复选框 |
JRadioButton | 单选按钮 |
JTextField | 文本框 |
JList | 列表 |
JComboBox | 下拉列表框 |
JOptionPane | 警告框 |
JTextArea | 文本区域 |
JTable | 表格 |
JTree | 树 |
1. 顶层容器的使用方法
顶层容器常用的包括JFrame、JDialog,这两个都是属于窗体,身为顶层容器,窗口是基本组件的载体,在Java Swing开发中我们经常可以用到。接下来来看看我们如何在代码中使用这两种容器。
使用JFrame窗体
import javax.swing.*;
public class JFrameDemo {
public static void CreateJFrame() {
JFrame jf = new JFrame("hh");//JFrame是 Java 中的一个类, 创建出来的窗口实际上是这个类的实际对象。
jf.setVisible(true); //设置窗体可视
jf.setSize(500, 300); //设置窗体大小, 前面是宽, 后面是高
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//设置窗体的关闭方式为Exit_ON_CLOSE----退出应用程序默认窗口关闭
}
public static void main(String[] args) {
JFrameDemo.CreateJFrame(); //调用本类中的CreateJFrame方法
}
}
使用JFrame的继承写法
import javax.swing.*;
public class JFrameDemo extends JFrame {
public void create() {
this.setVisible(true);
this.setSize(500, 350);
this.setTitle("hh");
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
JFrameDemo jd = new JFrameDemo();
jd.create();
}
}
public class JFrameDemo extends JFrame {
public JFrameDemo {
setTitle("hh");
setSize(300, 400);
setLocationRetiveTo(null);
setVisible(true);
setDefaultCloseOperation(WindowConstants.Exit_ON_CLOSE);
}
public static void main(String[] args) {
JFrameDemo jf = new JFrameDemo();
}
}//把相关设置写到构造函数中会更好
效果如图
setDefaultCloseOperation()方法用于设置窗口的关闭方式,常常传入
WindowConstants.EXIT_ON_CLOSE 退出应用程序默认窗口关闭
WindowConstants.DO_NOTHING_ON_CLOSE 什么也不做就将窗体关闭
WindowConstants.DISPOSE_ON_CLOSE 任何注册监听程序对象后会自动隐藏并释放窗体
WindowConstants.HIDE_ON_CLOSE 表示隐藏窗口的默认窗口关闭
JFrame常用方法:
void get/setTitle(): 获取/设置该容器的标题。
void get/setState(): 获取/设置该容器的最小化、最大化等状态。
void is/setVisible(): 获取/设置该容器的可视状态,换句话说,是否在屏幕上显示。
void get/setLocation(): 获取/设置该容器在屏幕上应当出现的位置。
void get/setsize(): 获取/设置该容器的大小。
void add(): 将组件添加到该容器中。
使用JDialog窗体
如果只是单纯使用的话,其调用方式JFrame窗体大致相同。JDialog常常用于从一个窗体中弹出另外一个窗体。
import javax.swing.*;
public class JDialogDemo {
public static void main(String[] args) {
JFrame jf = new JFrame("outter");
jf.setVisible(true);
jf.setSize(800, 600);
JDialog jd = new JDialog();
jd.setSize(200, 150);
jd.setTitle("inner");
jd.setVisible(true);
}
}
JDialog中方法与JFrame中方法大致相同,有
构造方法:
JDialog(Frame owner, String title)
void add(Component comp)
void setSize(int width, int height)
void setVisible(boolean b)
void setTitle(String title)
2. 中间组件的使用方法
JPanel组件定义面板实际上是一种容器组件,用来容纳各种其他轻量级组件。
常用方法:
void add(Component):添加组件。
void add(Component,int):添加组件至索引指定位置。
void add(Component,Object):按照指定布局限制添加组件。
void add(Component,Object,int):按照指定布局管理器限制添加组件到指定位置。
void remove(Component):移除组件。
void remove(int):移除指定位置的组件。
void removeAll():移除所有组件。
void paintComponent(Graphics):绘制组件。
void repaint():重新绘制。
void setPreferredSize(Dimension):设置组件尺寸。
实例:
import javax.swing.*;
public class Demo {
public static void main(String[] args) {
JFrame jf = new JFrame("窗口");
jf.setSize(250, 250);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JPanel panel = new JPenel();
JButton btn = new JButton("按钮");
panel.add(btn); //将按钮添加到案板中
jf.setContentPane(panel);//把面板容器 设置到窗口中
jf.setVisible(true);
}
}
JTabbedPane 选项卡面板。用于创建多个选项卡式窗格。 这些窗格可以放置其他组件,可以通过单击相应选项卡来切换窗格。
常用方法:
构造方法:
JTabbedPane()
JTabbedPane(int tabPlacement)
void add(Component comp)
void addTab(String title, Component component)//将选项卡/组件添加到TabbedPane 对象中
void setSize(int width, int height)
void setVisible(boolean b)
实例:
import javax.swing.*;
public class Demo {
public static void main(String[] args) {
JFrame jf = new JFrame("窗口");
jf.setSize(250, 250);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JTabbedPane tp = new JTabbedPane(JTabbedPane.TOP);
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
tp.addTab("选项1", panel1);
tp.addTab("选项2", panel2);;
jf.add(tp);
jf.setVisible(true);
}
}
JMenu/JMenuBar/JMenuItem ------ 菜单组件。JMenu为一级菜单,用于在菜单栏上添加菜单。JMenuItem为二级菜单,用于在菜单上添加菜单项,JMenuBar为菜单
JMenuBar常用方法:
void get/setAccelerator():获取/设置用作快捷键的 Ctrl+键。
void get/setText():获取/设置菜单的文本。
void get/setIcon():获取/设置菜单使用的图片
int getMenu(int index)
int getMenuCount();
JMenu常用方法:
构造函数:
JMenu()
JMenu(String s)
Component add(Component c)
void addSeparator()
JMenuItem常用方法
构造方法:
JMenuItem()
JMenuItem(String s)
void setEnabled(boolean b)
void setMnemonic(int mnemonic)
实例:
import javax.swing.*;
public class Demo {
public static void main(String[] args) {
JFrame jf = new JFrame("窗口");
jf.setSize(250, 250);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
jf.setLocationRelativeTo(null);
JMenu jm = new JMenu("File");
JMenuBar jmb = new JMenuBar();
JMenuItem jmi1 = new JMenuItem("Open");
JMenuItem jmi2 = new JMenuItem("Close");
JMenuItem jmi3 = new JMenuItem("Save");
JMenu jm1 = new JMenu("new");
JMenuItem jmi4 = new JMenuItem("Directory");
JMenuItem jmi5 = new JMenuItem("File");
jm1.add(jmi4);
jm1.add(jmi5);
jm.add(jm1);
jm.add(jmi1);
jm.add(jmi2);
jm.add(jmi3);
jmb.add(jm);//菜单栏中添加内容
jf.setJMenuBar(jmb);//加入菜单栏的方式不能用add
jf.setVisible(true);
}
}
3. 基本组件的使用方法
从以上的例子我们可以看出,组件的使用一般都是组件本身所在类实例化对象,然后通过调用窗体的add()方法,将组件添加到窗体中。
我们先来看一下一些基本组件和其功能:
JButton:按钮
JLabel:标签
JCheckBox:复选框
JRadioButton:单选按钮
JTextFiled:文本框
JList:列表
JComboBox:下拉列表框
JTextArea:文本区域
如何在窗体中进行使用:
import javax.swing.*;
public class Demo extends JFrame {
private JButton jbtn;
private JLabel jlab;
private JComboBox jcom;
private JTextArea jt;
private JList jli;
private JCheckBox jck;
private JPanel jp;
private JTextField jtxt;
private JRadioButton jradio1;
private JRadioButton jradio2;
private ButtonGroup buttonGroup;
public Demo() {
setTitle("Demo");
setSize(500, 500);
setLocationRelativeTo(null);
jtxt = new JTextField("我是:");
jtxt.setText("hhh");
jp = new JPanel();
jbtn = new JButton("按钮");
jlab = new JLabel("我 是 hhh ");
jt = new JTextArea(5, 20);
jck = new JCheckBox();
jradio1 = new JRadioButton("1");
jradio2 = new JRadioButton("2");
buttonGroup = new ButtonGroup();
buttonGroup.add(jradio1);
buttonGroup.add(jradio2);
jradio1.setSelected(true);
String[] cities = {"Beijing", "Qingdao", "Shanghai"};
jli = new JList(cities);
jcom = new JComboBox(cities);
jli.setSelectedIndex(0);
jp.add(jbtn);
jp.add(jlab);
jp.add(jcom);
jp.add(jt);
jp.add(jck);
jp.add(jli);
add(jp);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
Demo d = new Demo();
}
}
未完待续