- 第一个窗口程序
- 容器控件
- JLabel控件
- 简单事件处理
- 文本框JTextFiled
- 复选框JCheckBox
- 下拉列表JComboBox
前段时间学了GUI,总体上概念还是有点模糊,于是决定花点时间简单整理下。先简单介绍一下GUI,GUI就是图形用户界面。
第一个窗口程序Java提供了GUI相关的两个API:分别是AWT、Swing。
AWT是最早提供的GUI库,依赖本地平台,界面不好看,功能有限。之后推出了Swing,Swing并没有完全替代AWT,而是建立在AWT的拓展,是轻量级的界面设计库。
废话不多说,开始上代码!
public class MyDemo {
public static void main(String[] args) {
//JFrame指一个窗口
JFrame frame=new JFrame("窗口案例");
//关闭窗口时退出程序
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//调整窗口大小
frame.setSize(400,300);
//显示窗口(放到程序后面,否则窗口可能显示不出来)
frame.setVisible(true);
}
}
因为这个窗口啥也没有,效果就是这样式的
当我们需要在窗口里边添加控件时,我们用到JPanel和JButton 其中JPanel表示一个容器,也称为面板。
JButton表示一个按钮控件 我们需要向窗口里边添加一个容器JPanel,然后在向容器内添加控件 ,还是刚刚MyDemo类,我们添加如下代码。
//创建一个面板
JPanel panel=new JPanel();
//将面板添加到窗口中
frame.setContentPane(panel);
//添加按钮
JButton button=new JButton("测试");
panel.add(button);
这时就有了一个按钮组件了
JLabel是标签控件,显示单行文本,其中相关的方法可见代码中的注释。
//继续在MyDemo类添加
JLabel label=new JLabel("java 你好!");
panel.add(label);
常见的方法测试如下
public class MyFrame extends JFrame{
public MyFrame(String title) {
super(title);
//创建一个面板
JPanel panel=new JPanel();
//将面板添加到窗口中
this.setContentPane(panel);
//添加按钮
JButton button=new JButton("测试");
panel.add(button);
JLabel label=new JLabel("JLabel标签测试");
//设置字体
label.setFont(new Font("微软雅黑",Font.PLAIN,14));
//设置文字颜色
label.setForeground(new Color(100,200,50));
//设置背景色
label.setOpaque(true);//背景色默认透明显示,设置不透明
label.setBackground(new Color(100,30,100));
//设置控件大小
label.setPreferredSize(new Dimension(150, 30));//Dimension指定高度、宽度
//设置文本居中对齐
label.setHorizontalAlignment(SwingConstants.CENTER);
panel.add(label);
}
}
(ps:这里写了一个Myframe类继承Frame类,主要写控件的操作,下面的如果没有特别提示的话都是在Myframe类里面写的!)
简单事件处理事件处理使用的是监听机制
步骤:
1、添加一个监听器类,实现ActionListener接口
2、设置监听器>
3、将监听器对象传给控件
Main方法所在的类如下
public class MyDemo {
public static void main(String[] args) {
//JFrame指一个窗口
MyFrame frame=new MyFrame("窗口测试");
//关闭窗口时退出程序
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//调整窗口大小
frame.setSize(400,300);
//显示窗口(放到程序后面,否则窗口可能显示不出来)
frame.setVisible(true);
}
}
监听事件所在的类
public class MyFrame extends JFrame{
public MyFrame(String title) {
super(title);
//创建一个面板
JPanel panel=new JPanel();
//将面板添加到窗口中
this.setContentPane(panel);
//添加按钮
JButton button=new JButton("测试");
button.addActionListener(new MyactionListener());
panel.add(button);
JLabel label=new JLabel("java 你好!");
panel.add(label);
}
private class MyactionListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("按钮被点击了!");
}
}
}
当点击按钮时,触发监听事件,控制台输出如下
练习:点击按钮,获取当前时间(使用SimpleDateFormat类获取当前时间)
public class MyFrame extends JFrame {
JLabel timeJLabel = new JLabel("00:00:00");// 作为Myframe的属性,使内部类能够访问
public MyFrame(String title) {
super(title);
// 创建一个面板
JPanel panel = new JPanel();
// 将面板添加到窗口中
this.setContentPane(panel);
// 添加按钮
JButton button = new JButton("测试");
button.addActionListener(new MyactionListener());
panel.add(button);
panel.add(timeJLabel);
}
private class MyactionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
SimpleDateFormat sdf = new SimpleDateFormat("HH:MM:SS");
String str = sdf.format(new Date());// 获取当前时间转化位字符串
timeJLabel.setText(str);
}
}
}
效果如下
JTextFiled的相关的两个方法是setText(str)和getText()
添加监听事件,实现内容输出
public class MyFrame extends JFrame {
JTextField jField = new JTextField(20);
JButton button = new JButton("点我");
JTextField jField2 = new JTextField(20);
public MyFrame(String title) {
super(title);
// 创建一个面板
JPanel panel = new JPanel();
// 将面板添加到窗口中
this.setContentPane(panel);
jField.setText("我是一个文本框");
button.addActionListener(new ButtonActionListener());
panel.add(jField);
panel.add(button);
panel.add(jField2);
}
public class ButtonActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
test();
}
}
public void test() {
String str = jField.getText();
jField2.setText(str);
}
}
效果如下
JCheckBox相关的方法
setSelected(true/false)设置选中状态
isSelect()是否选中
addActionListener()勾选或取消获取事件
public class MyFrame extends JFrame {
JCheckBox agreeBox = new JCheckBox("同意用户协议");
JCheckBox agreeBox1 = new JCheckBox("取消");
JButton nextButton = new JButton("下一步");
public MyFrame(String title) {
super(title);
// 创建一个面板
JPanel panel = new JPanel();
// 将面板添加到窗口中
this.setContentPane(panel);
panel.add(agreeBox);
panel.add(agreeBox1);
panel.add(nextButton);
}
}
效果如下
练习:添加功能,当复选框没有选择时,默认按钮是不可选的,既无法进行下一步操作,当选中“同意用户协议后“,会弹出对话信息框。
public class MyFrame extends JFrame {
JCheckBox agreeBox = new JCheckBox("同意用户协议");
JCheckBox agreeBox1 = new JCheckBox("取消");
JButton nextButton = new JButton("下一步");
JPanel panel = new JPanel();
public MyFrame(String title) {
super(title);
// 将面板添加到窗口中
this.setContentPane(panel);
panel.add(agreeBox);
panel.add(agreeBox1);
panel.add(nextButton);
// 界面初始化
nextButton.setEnabled(false);
// 给CheckBox添加事件处理
agreeBox.addActionListener(new CheckBoxListener());
nextButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(panel, "欢迎!");
}
});
}
public class CheckBoxListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if (agreeBox.isSelected()) {
nextButton.setEnabled(true);
} else
nextButton.setEnabled(false);
}
}
}
效果如下
点击前
点击后
JComboBox colorFiled=new JComboBox<>();
JComboBox是一个泛型,参数类型T表示的是数据项的类型
数据项
addItem() 添加数据项
getItemCount()获取数据项个数
getItemAt(index)获取数据项
按索引访问
getSelectedIndex()获取选中项的索引
setSelectedIndex()设置选中项
remove(index)删除索引
按数据项访问
getSelectedItem() 获取数据项
setSelectedItem()设置数据项
remove(item)删除
public class MyFrame extends JFrame{
JComboBox colorBox=new JComboBox();
public MyFrame(String title) {
super(title);
//创建一个面板
JPanel panel=new JPanel();
//将面板添加到窗口中
this.setContentPane(panel);
//下拉列表
colorBox.addItem("红色");
colorBox.addItem("绿色");
colorBox.addItem("蓝色");
panel.add(colorBox);
//测试按钮
JButton testButton=new JButton("测试");
panel.add(testButton);
testButton.addActionListener(new testButtonListener());
}
public class testButtonListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
test();
}
}
public void test() {
//获取个数
Object a=colorBox.getSelectedItem();
int count=colorBox.getItemCount();
String value=colorBox.getItemAt(0);
System.out.println("数据项个数:"+count+"索引值:"+value);
System.out.println(a);
}
}
控制台输出
到此先告一段落!如果有小伙伴发现有问题的,敬请批评指正!



