首先应该明白,用java创建一个窗体程序包括下面几步:
1.实例化JFrame对象,也就是创建一个窗体。 2.获取一个容器。 3.创建组件。 4.向容器添加组件。 5.使窗体可视。 6.设置窗体大小。 7.调用上面方法。
应该有这样的概念,Swing组件的窗体通常与组件和容器相关,所以在JFrame对象创建完成后,需要调用方法将窗体转换为容器,然后在容器中添加组件或设置布局管理器,通常,这个容器用来包含和显示组件。
可以看到JFrame继承于Container类。
import java.awt.*;
import javax.swing.*;
public class zujian extends JFrame{
public void windows() {
//实例化JFrame对象,就是创建一个窗体
JFrame jf =new JFrame("花狗");//设置窗体标题
//获取容器
Container c =jf.getContentPane();
//下面所有组件的创建都将在这里编写,所有下面只列出组件创建的代码。
//如果有其他改动,我会列出。
jf.setVisible(true);//设置窗体可视
jf.setSize(300,300);//设置窗体大小
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//设置窗体关闭方式
}
public static void main(String[] args) {
new zujian().windows();
}
}
这是基础代码,创建一个空白窗体,为了文章不臃肿,我就只列出一次。关于java文档,可自行下载: java文档
组件名称 | 定义 |
---|---|
JButton | 代表Swing按钮,按钮可以带一些图片或文字 |
JCheckBox | 代表Swing中的复选框组件 |
JComboBox | 代表Swing下拉列表框,可以在下拉显示区域显示多个选项 |
JFrame | 代表Swing的框架类 |
JDialog | 代表Swing版本的对话框 |
JLabel | 代表Swing中的标签组件 |
JRadioButton | 代表Swing单选按钮 |
JList | 代表能够在用户界面中显示一系列条目的组件 |
JTextField | 代表文本框 |
JPasswordField | 代表密码框 |
JTextArea | 代表Swing中的文本区域 |
JOptionPane | 代表Swing中的一些对话框 |
每个组件都有很多种用法,建议查看java文档。
JButton类拥有5种构造方法:
构造方法 | 解释 |
---|---|
JButton() | 创建没有设置文本或图标的按钮 |
JButton(String text) | 创建带有文本的按钮 |
JButton(Icon icon) | 创建带有图标的按钮 |
JButton(String text, Icon icon) | 创建带有初始文本和图标的按钮 |
JButton(Action a) | 创建一个按钮,其属性从所提供的Action中获取 |
JButton jb=new JButton();
c.add(jb);
可以看到创建的按钮涉及整个窗体,这是为什么呢,窗体默认使用边界布局器,创建的组件会覆盖整个窗体,我们只需要取消边界布局,改用绝对布局:
jf.setLayout(null); //告诉窗体取消边界布局
JButton jb=new JButton();
jb.setBounds(10,30,80,30);//使用绝对布局,自定义按钮大小
c.add(jb);
如果这里有疑问可查看: 布局管理器
JButton jb=new JButton("我是按钮");
jb.setBounds(50,50,100,100);//使用绝对布局,自定义按钮大小
c.add(jb);
jf.setVisible(true);
jf.setSize(300,300);
想使用带有图标的按钮,需要使用Icon接口:Icon
import java.awt.*;
import javax.swing.*;
public class DrawIcon implements Icon {
private int width; //设置图标的宽
private int height; //设置图标的长
public int getIconHeight() {
return this.height;
}
public int getIconWidth() {
return this.width;
}
public DrawIcon(int width,int height) {
this.width=width;
this.height=height;
}
public void paintIcon(Component arg0,Graphics arg1,int x,int y) {
arg1.fillOval(x, y, width, height);//绘制一个圆形
}
public static void main(String[] args) {
DrawIcon icon =new DrawIcon(15,15);
JButton jl=new JButton(icon);
JFrame jf =new JFrame("花狗");
jf.setLayout(null); //告诉窗体取消边界布局
jl.setBounds(50,50,100,100);//使用绝对布局,自定义按钮大小
Container c=jf.getContentPane();
c.add(jl);
jf.setVisible(true);
jf.setSize(300,300);
}
}
也可以使用图片作为图标来使用:
import java.awt.*;
import javax.swing.*;
import java.net.URL;
public class myicon extends JFrame{
public myicon() {
Container container =getContentPane();
//创建一个标签
JButton jb =new JButton();
setLayout(null); //告诉窗体取消边界布局
jb.setBounds(50,50,100,100);//使用绝对布局,自定义按钮大小
//获取图片所在的URL
URL url = myicon.class.getResource("/wo.PNG");
Icon icon =new ImageIcon(url);
jb.setIcon(icon);
//有两种添加方法,一种就是在创建的时候直接添加图标,第二种就是在后续使用方法添加
jb.setHorizontalAlignment(SwingConstants.CENTER);
jb.setOpaque(true);
container.add(jb);
setSize(400,300);
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new myicon();
}
}
创建文本加图标的按钮,这里就不在赘述,至于最后一个构造方法使用Action接口的使用方法,这里不在讲解。
JCheckBox类有8中构造方法:
构造方法 | 解释 |
---|---|
JCheckBox() | 创建一个最初未选中的复选框按钮,该按钮没有文本,也没有图标。 |
JCheckBox(Icon icon) | 使用图标创建一个最初未选中的复选框。 |
JCheckBox(Icon icon, boolean selected) | 创建带有图标的复选框,并指定是否最初选中它。 |
JCheckBox(String text) | 用文本创建一个最初未选中的复选框。 |
JCheckBox(String text, boolean selected) | 创建带有文本的复选框,并指定是否最初选中它。 |
JCheckBox(String text, Icon icon) | 用指定的文本和图标创建一个最初未选中的复选框。 |
JCheckBox(String text, Icon icon, boolean selected) | 创建带有文本和图标的复选框,并指定是否最初选中它。 |
JCheckBox(Action a) | 创建一个复选框,其中的属性取自提供的操作。 |
JCheckBox jc =new JCheckBox();
jc.setBounds(50,50,100,100);//使用绝对布局,自定义大小
JCheckBox jl=new JCheckBox ("橘子");
不常用的这里不再列出。
JComboBox有4种构造方法:
构造方法 | 解释 |
---|---|
JComboBox() | 使用默认数据模型创建JComboBox。 |
JComboBox(ComboBoxModel aModel) | 创建一个JComboBox,它从现有的ComboBoxModel中获取项目。 |
JComboBox(Object[] items) | 创建一个JComboBox,其中包含指定数组中的元素。 |
JComboBox(Vector<?> items) | 创建一个JComboBox,其中包含指定向量中的元素。 |
JComboBox jc =new JComboBox();
jc.setBounds(50,50,80,30);//使用绝对布局,自定义大小
可以看到创建了一个空白的下拉列表框,显然在日常应用中是没有用的,下面来添加选项:
JComboBox jc =new JComboBox();
jc.setBounds(50,50,100,30);//使用绝对布局,自定义大小
jc.addItem("--请选择--");
jc.addItem("身份证");
jc.addItem("驾驶证");
jc.addItem("学生证");
JFrame类有4种构造方法:
构造方法 | 解释 |
---|---|
JFrame() | 构造一个最初不可见的新框架。 |
JFrame(GraphicsConfiguration gc) | 在屏幕设备的指定图形配置中创建一个框架和一个空白标题。 |
JFrame(String title) | 使用指定的标题创建一个最初不可见的新框架。 |
JFrame(String title, GraphicsConfiguration gc) | 创建具有指定标题和指定屏幕设备图形配置的JFrame。 |
import java.awt.*;
import java.util.Vector;
import javax.swing.*;
public class zujian extends JFrame{
public void windows() {
//实例化JFrame对象,就是创建一个窗体
JFrame jf =new JFrame("花狗");//设置窗体标题
//获取容器
Container c =jf.getContentPane();
jf.setLayout(null); //告诉窗体取消边界布局
jf.setVisible(true);
jf.setSize(300,300);
}
public static void main(String[] args) {
new zujian().windows();
}
}
JDialog有N种,确实有点多,只列出常见的:
构造方法 | 解释 |
---|---|
JDialog() | 创建没有标题和指定框架所有者的非模态对话框。 |
JDialog(Frame owner) | 创建一个非模态对话框,指定框架为其所有者,标题为空。 |
JDialog(Frame owner, boolean modal) | 以空标题和指定的模式和框架作为其所有者创建对话框。 |
JDialog(Frame owner, String title) | 创建具有指定标题和指定所有者框架的非模态对话框。 |
JDialog(Frame owner, String title, boolean modal) | 创建具有指定标题、所有者框架和模式的对话框。 |
import java.awt.*;
import javax.swing.*;
public class windowpr extends JDialog{
public windowpr(MyFrame frame) {
//实例化一个JDialog类对象,指定对话框的父窗体,窗体标题和类型
super(frame,"第一个JDialog窗体",true);
Container container =getContentPane();//创建一个容器
container.add(new JLabel("这是一个对话框"));//在容器中添加标签
setBounds(120,120,100,100);//设置对话框窗体大小
}
}
JLabel有6种构造方法:
构造方法 | 解释 |
---|---|
JLabel() | 创建一个没有图像和标题为空字符串的JLabel实例。 |
JLabel(Icon image) | 使用指定的图标创建JLabel实例。 |
JLabel(Icon image, int horizontalAlignment) | 使用指定的图像和水平对齐方式创建JLabel实例。 |
JLabel(String text) | 使用指定的文本创建JLabel实例。 |
JLabel(String text, Icon icon, int horizontalAlignment) | 使用指定的文本、图像和水平对齐方式创建JLabel实例。 |
JLabel(String text, int horizontalAlignment) | 使用指定的文本和水平对齐方式创建JLabel实例。 |
JLabel jl=new JLabel();//创建一个标签
这类标签没有上面实际作用,我们继续往下看:
JLabel jl=new JLabel("标签");//创建一个标签
import java.awt.*;
import javax.swing.*;
public class DrawIcon implements Icon {
private int width; //设置图标的宽
private int height; //设置图标的长
public int getIconHeight() {
return this.height;
}
public int getIconWidth() {
return this.width;
}
public DrawIcon(int width,int height) {
this.width=width;
this.height=height;
}
public void paintIcon(Component arg0,Graphics arg1,int x,int y) {
arg1.fillOval(x, y, width, height);
}
public static void main(String[] args) {
DrawIcon icon =new DrawIcon(15,15);
JLabel jl=new JLabel ("标签",icon,SwingConstants.CENTER);
JFrame jf =new JFrame("花狗");
jf.setLayout(null); //告诉窗体取消边界布局
jl.setBounds(50,50,100,100);//使用绝对布局,自定义按钮大小
Container c=jf.getContentPane();
c.add(jl);
jf.setVisible(true);
jf.setSize(300,300);
}
}
构造方法 | 解释 |
---|---|
JRadioButton() | 创建一个没有设置文本的初始未选单选按钮。 |
JRadioButton(Action a) | 创建一个radiobutton,其中的属性取自提供的操作。 |
JRadioButton(Icon icon) | 创建一个最初未选择的单选按钮,该按钮具有指定的图像,但没有文本。 |
JRadioButton(Icon icon, boolean selected) | 创建具有指定图像和选择状态但没有文本的单选按钮。 |
JRadioButton(String text) | 用指定的文本创建未选中的单选按钮。 |
JRadioButton(String text, boolean selected) | 创建具有指定文本和选择状态的单选按钮。 |
JRadioButton(String text, Icon icon) | 创建一个单选按钮,该按钮具有指定的文本和图像,并且最初未被选中。 |
JRadioButton(String text, Icon icon, boolean selected) | 创建具有指定文本、图像和选择状态的单选按钮。 |
JRadioButton jr =new JRadioButton();
JRadioButton jr =new JRadioButton("香蕉");
JList类有4个构造方法:
构造方法 | 解释 |
---|---|
JList() | 使用空的只读模型构造JList。 |
JList(E[] listData) | 构造一个JList,用于显示指定数组中的元素。 |
JList(ListModel dataModel) | 构造一个JList,用于显示来自指定的非空模型的元素。 |
JList(Vector<? extends E> listData) | 构造一个JList,用于显示指定向量中的元素。 |
JList jr =new JList();
和下拉列表框一样空白,没有什么实际价值。
Vector vt =new Vector();
vt.add("红色");
vt.add("绿色");
vt.add("蓝色");
JList jr =new JList();
jr.setListData(vt);
和下拉列表框不同的是该组件直接显示选项。
JTextField类有5种构造方法:
构造方法 | 解释 |
---|---|
JTextField() | 构造一个新TextField。 |
JTextField(Document doc, String text, int columns) | 构造一个新的JTextField,该字段使用给定的文本存储模型和给定的列数。 |
JTextField(int columns) | 构造具有指定列数的新空TextField。 |
JTextField(String text) | 构造一个用指定文本初始化的新TextField。 |
JTextField(String text, int columns) | 构造一个用指定的文本和列初始化的新TextField。 |
String str="大家好,我是花狗。";
JTextField jr =new JTextField(str);
JPasswordField类有5种构造方法:
构造方法 | 解释 |
---|---|
JPasswordField() | 构造一个新的JPasswordField,其中包含一个默认文档、null起始文本字符串和0列宽度。 |
JPasswordField(Document doc, String txt, int columns) | 构造一个新的JPasswordField,该字段使用给定的文本存储模型和给定的列数。 |
JPasswordField(int columns) | 使用指定的列数构造新的空JPasswordField。 |
JPasswordField(String text) | 构造一个用指定文本初始化的新JPasswordField。 |
JPasswordField(String text, int columns) | 构造一个用指定文本和列初始化的新JPasswordField。 |
JPasswordField jr =new JPasswordField ();
可以通过该方法修改回显字符:
jr.setEchoChar('#');
JTextArea类有有6种构造方法:
构造方法 | 解释 |
---|---|
JTextArea() | 构造一个新的文本区域。 |
JTextArea(Document doc) | 使用给定的文档模型构造一个新的JTextArea,并默认为所有其他参数(null, 0,0)。 |
JTextArea(Document doc, String text, int rows, int columns) | 用指定的行数和列数以及给定的模型构造一个新的JTextArea。 |
JTextArea(int rows, int columns) | 用指定的行数和列数构造新的空TextArea。 |
JTextArea(String text) | 构造一个显示指定文本的新文本区域。 |
JTextArea(String text, int rows, int columns) | 用指定的文本和行与列的数目构造一个新TextArea。 |
JTextArea jr =new JTextArea ();
与文本框不同的是这个可以输入内容:
也可以提前显示一些内容,就好比一些软件搜索框默认热门内容:
JOptionPane类有7种构造方法:
构造方法 | 解释 |
---|---|
JOptionPane() | 使用测试消息创建JOptionPane。 |
JOptionPane(Object message) | 创建JOptionPane实例,以显示使用纯消息消息类型和UI提供的默认选项的消息。 |
JOptionPane(Object message, int messageType) | 创建JOptionPane实例,以显示具有指定消息类型和默认选项的消息。 |
JOptionPane(Object message, int messageType, int optionType) | 创建JOptionPane实例,以显示具有指定消息类型和选项的消息。 |
JOptionPane(Object message, int messageType, int optionType, Icon icon) | 创建JOptionPane实例,以显示具有指定消息类型、选项和图标的消息。 |
JOptionPane(Object message, int messageType, int optionType, Icon icon, Object[] options) | 创建JOptionPane实例,以显示具有指定消息类型、图标和选项的消息。 |
JOptionPane(Object message, int messageType, int optionType, Icon icon, Object[] options, Object initialValue) | 创建JOptionPane实例,以显示具有指定消息类型、图标和选项的消息,并指定初始选择的选项。 |
JOptionPane jo =new JOptionPane();
jo.showMessageDialog(null, "普通提示框");
若有错误,欢迎指正,欢迎评论。 每文一句:奋斗不是简单的吃苦,奋斗是一种心态。一种做任何事情,只要有一丝可能,就愿意全心全意去投入和尝试的心态。奋斗的心态会调用尽你前半生所有的智慧、资源、技巧和情商去面对问题,还会把你以前积累上的不足,以最直接的方式暴露在你前面。让你知道自己有多强,也让你知道自己有多弱。