图形用户界面
组件的分类
swing拥有统一的风格,不依赖操作系统。可插入轻量级组件等优点;
- 窗体:跳出来的方块(JFrame,JDialog等窗口)
- 标签(JLabel):图中自带的文字部分
- 文本框(Text):只可以输入一行文字
- 文本域:可以输入多行文字
- 下拉框:
JFrame窗体的创建
JFrame 类就是一个容器,允许程序员把其他组件添加到它里面,把它们组织起来,并把它们呈现给用户。
package test;
import java.awt.Color;
import java.awt.Container;
import javax.swing.*;
class test1 extends JFrame{
private static final long serialVersionUID = 1L;
/*JFrame窗体的创建及设置*/
public test1() {
//Jframe f=new JFrame("窗体标题");//未进行继承时使用这个
setTitle("设置标题");//创建窗体对象
setVisible(true);//设置窗体可见
/*
* EXIT_ON_CLOSE:隐藏窗体;并停止程序
* DO_NOTHING_ON_CLOSE:无任何操作
* HIDE_ON_CLOSE:隐藏窗体,但不停止程序
* DISPOSE_ON_CLOSE:释放窗体资源
* */
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗体关闭规则
setSize(200,200);//设置窗体大小,单位为像素
setLocation(100, 100);//设置窗体位置,单位为像素
//me.setBounds(x, y, width, height);设置窗体位置,大小
Container c=getContentPane();//获取窗体容器
c.setBackground(Color.BLUE);//设置窗体颜色
JLabel l=new JLabel("这是一个窗体");
c.add(l);//添加组件
//c.remove(l);//删除容器中的组件
c.validate();//验证容器中的组件,类似于刷新
// f.setContentPane(c);//重新载入容器
setResizable(false);//设置窗体是否可以改变大小
System.out.println("x="+getX()+" y="+getY());//获取窗体的坐标
}
public static void main(String[] args) {
new test1();
}
}
JDialog窗口的创建
对话框(Jdialog)一般是一个临时的窗口,主要用于显示提示信息或接受用户输入。所以,在对话框中一般不需要菜单条,也不需要改变窗口大小。此外,在对话框出现时,可以设定禁止其他窗口的输入,直到这个对话框被关闭。对话框是由 JDialog 类实现的。
/*代码实现*/
package test;
import java.awt.;
import javax.swing.*;
public class test2 extends JDialog{
private static final long serialVersionUID = 1L;
public test2(JFrame frame) { //如果无JFrame参数则无法阻挡其他操作
super(frame,"对话框标题",true);
/*super()函数参数:
* 第一个参数:父窗体对象
* 第二个参数:对话框标题
* 第三个参数:是否阻塞父窗体
* true则会阻塞父类窗体
* false则不会
* 默认为true
*/
Container c=getContentPane();//获取窗体容器
c.add(new JLabel("这是一个对话框"));
setBounds(100,100,100,100);//设置窗体坐标和大小
}
public static void main(String[] args) {
JFrame f=new JFrame("父窗体");
f.setBounds(50, 50,300,300);
Container c=f.getContentPane();
JButton bt=new JButton("弹出对话框");
c.setLayout(new FlowLayout()); //设置布局,用流布局
c.add(bt);
f.setVisible(true);
f.setDefaultCloseOperation(EXIT_ON_CLOSE);
bt.addActionListener(new ActionListener(){ //添加动作对象
public void actionPerformed(ActionEvent e) {
test2 d=new test2(f);
d.setVisible(true); //设置窗体可见,最好放在这
};
}); //添加动作监听
}
}
标签(JLabel)和文本框(JTextfield)的使用
package test;
import java.awt.;
import javax.swing.*;
public class test3 extends JFrame {
private static final long serialVersionUID = 1L;
public test3(){
setBounds(100,100,230,100);
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container c=getContentPane();
c.setLayout(new FlowLayout());
/* 标签的使用
* JLabel l=new JLabel("这是一个标签"); //创建一个标签
l.setText("可以在这里更改标签能内容");
l.getText();可以获取标签内容
l.setFont(new Font("楷体",Font.BOLD,15);//设置字体,加粗或斜体,字号
l.setForeGround(Color.RED);//设置字体颜色
c.add(l); //将标签添加到容器中
*/ JTextField as=new JTextField();
as.setColumns(20); //设置文本框长度为20个字符
as.setText("li yong an"); //设置文本
as.setFont(new Font("黑体",Font.PLAIN,20));//字体,样式,字号大小
c.add(as);
JButton bt=new JButton("确定");
bt.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("文本框中的内容为:"+as.getText());//获取文本框中的内容值
as.setText("");//点击完后设置文本框中的内容为空,有清空效果
as.requestFocus();//获取光标
}
});
c.add(bt);
setVisible(true);//设置窗口为可见
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new test3();
}
}
下拉列表框的创建
package test;
import javax.swing.*;
import java.awt.*;
public class test5 extends JFrame{
private static final long serialVersionUID = 1L;
public test5() {
setBounds(100,100,190,120);
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container c=getContentPane();
c.setLayout(null);
//下面有三种创建下拉列表的方式
/* JComboBox<String> comboBox=new JComboBox<>();//下拉列表的创建
comboBox.addItem("1");//一个一个添加添加列表元素
comboBox.addItem("1");
comboBox.addItem("1");
comboBox.addItem("1");
*/
/* String items[]= {"元素1","元素2","元素3"};
JComboBox<String> comboBox=new JComboBox<>(items);//使用String添加下拉列表元素
*/
JComboBox<String> comboBox=new JComboBox<>();
String items[]= {"元素1","元素2","元素3"};
ComboBoxModel<String> cm=new DefaultComboBoxModel<>(items);//创建下拉列表模型
comboBox.setModel(cm);//向列表中添加数据模型
//对列表进行打印
JButton bt=new JButton("打印");
bt.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("选中的索引:"+comboBox.getSelectedIndex());
System.out.println("选中的值:"+comboBox.getSelectedItem());
}
});
bt.setBounds(100,10,60,20);
c.add(bt);
comboBox.setEditable(true);//下拉列表是否可以编辑
comboBox.setBounds(10,10,80,30);//设置坐标和大小
c.add(comboBox);
setVisible(true);
}
public static void main(String[] args) {
new test5();
}
}
文本域的创建及使用(JTextArea)
package test;
import java.awt.Container;
import java.awt.Font;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class test2 extends JFrame{
private static final long serialVersionUID = 1L;
public test2() {
setBounds(100,100,100,200);
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container c=getContentPane();
JTextArea area=new JTextArea();
area.setText("这是文本域");
area.setRows(5);//设定行
area.setColumns(20);//设定列数
area.append("添加内容");
area.insert("插入", 2);//在第二个字后添加字符串
area.setFont(new Font("楷体",Font.PLAIN,20));
JScrollPane js=new JScrollPane(area);//给文本域添加滚动条
c.add(js);
setVisible(true);
}
public static void main(String[] args) {
new test2();
}
}
列表框的创建及使用
package test;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class test1 extends JFrame {
private static final long serialVersionUID = 1L;
public test1(){
setBounds(100,100,120,120);
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container c= getContentPane();
c.setLayout(null);
String items[]= {"元素1","元素2","元素3","元素4","元素5","元素6"};
//第一种创建列表框的方法
/*string数组创建
JList<String> jl=new JList<>(items);
*/
//第二种创建文本框的方法,数据模型法
DefaultListModel<String> model=new DefaultListModel<>();//创建列表框的数据模型
for(String tmp:items) {
model.addElement(tmp);//向列表框载入数据元素
}
JList<String> jl=new JList<>();
model.addElement("添加元素");//列表框载入新数据
jl.setModel(model);//列表框载入数据模型
/*
* 设置选择列表框元素的模式
* SINGLE_SELECTON:单选
* SINGLE_INTERVAL_SELECTION:只能选择相邻的元素
* MULTIPLE_INTERVAL_SELECTION:随便选
*/
jl.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
JScrollPane js=new JScrollPane(jl);//为列表框添加滚动条
js.setBounds(10,10,100,100);//设置坐标和大小
c.add(js);
/*这里只需要将滚动条添加到容器中就行(列表框会自动加入)
* 只需设置滚动条的大小和位置就行
*/
JButton bt=new JButton("确定");
bt.setBounds(120,90,70,50);
bt.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
//获取列表框中选中的所有元素
java.util.List<String> values=jl.getSelectedValuesList();
for(String tmp:values) {
System.out.println(tmp);
}
System.out.println("------end--------");
}
});
c.add(bt);
setVisible(true);
}
public static void main(String[] args) {
new test1();
}
}
面板JPanel:可以理解为窗体中的窗体
package test;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;
import javax.swing.*;
public class test1 extends JFrame{
private static final long serialVersionUID = 1L;
public test1() {
setBounds(100,100,500,300);//设置坐标和宽高
setDefaultCloseOperation(EXIT_ON_CLOSE); //设置关闭规则
Container c=getContentPane(); //获取窗体容器
c.setLayout(new GridLayout(2,2)); //是用网格布局
JPanel p1=new JPanel(); //面板
p1.setLayout(new GridLayout(1,3,10,10));
//面板P1使用网格布局
JPanel p2=new JPanel(new BorderLayout());
JPanel p3=new JPanel(new GridLayout(1,2,10,10));//一行两列
JPanel p4=new JPanel(new GridLayout(2,1,10,10));//两行一列
p1.setBorder(BorderFactory.createTitledBorder("面板1"));//添加边框和面板标题
p2.setBorder(BorderFactory.createTitledBorder("面板2"));//添加边框和面板标题
p3.setBorder(BorderFactory.createTitledBorder("面板3"));//添加边框和面板标题
p4.setBorder(BorderFactory.createTitledBorder("面板4"));//添加边框和面板标题
p1.add(new JButton("p1"));
p1.add(new JButton("p1"));
p1.add(new JButton("p1"));
p1.add(new JButton("p1"));
p2.add(new JButton("p2"),BorderLayout.CENTER);
p2.add(new JButton("p2"),BorderLayout.SOUTH);
p2.add(new JButton("p2"),BorderLayout.WEST);
p2.add(new JButton("p2"),BorderLayout.NORTH);
p2.add(new JButton("p2"),BorderLayout.EAST);
p3.add(new JButton("p3"));p3.add(new JButton("p3"));
p3.add(new JButton("p3"));p3.add(new JButton("p3"));
p4.add(new JButton("p4"));p4.add(new JButton("p4"));
p4.add(new JButton("p4"));p4.add(new JButton("p4"));
c.add(p1); c.add(p2);
c.add(p3); c.add(p4);
setVisible(true);
}
public static void main(String[] args) {
new test1();
}
}
滚动面板的创建
//滚动面板的创建
package test;
import java.awt.Container;
import javax.swing.*;
public class test1 extends JFrame{
public test1() {
setBounds(100,100,500,500);
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container c=getContentPane();
JTextArea are=new JTextArea();
JScrollPane sp=new JScrollPane(are);//创建滚动面板,给文本域添加滚动条
c.add(sp);
setVisible(true);
}
public static void main(String[] args) {
new test1();
}
}