第4章开始
P16第4章 标签 JLabel
1、复制SwingDemo
package Swing0401;
import javax.swing.*;
public class SwingDemo
{
private static void createGUI()
{
// JFrame指一个窗口,构造方法的参数为窗口标题
MyFrame frame = new MyFrame("Swing Demo");//传递参数给构造方法
// 当关闭窗口时,退出整个程序 (不懂的话没事,照抄即可,这一行不是重点)
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 设置窗口的其他参数,如窗口大小
frame.setSize(400, 300);
// 显示窗口
frame.setVisible(true);
}
public static void main(String[] args)
{
// 此段代码间接地调用了 createGUI(),具体原理在 Swing高级篇 里讲解
// 初学者先照抄此代码框架即可
SwingUtilities.invokeLater(new Runnable() {
public void run()
{
createGUI();
}
});
}
}
package Swing0401;
import javax.swing.*;
import java.awt.*;
import java.text.SimpleDateFormat;
import java.util.Date;
public class MyFrame extends JFrame
{
public MyFrame(String title)
{
super(title);
// 内容面板 (ContentPane)
Container contentPane = getContentPane();
contentPane.setLayout(new FlowLayout());
JLabel label = new JLabel();
contentPane.add(label);
label.setText("嘻嘻你好");
label.setFont(new Font("微软雅黑",0,14));
label.setForeground(Color.BLUE);
label.setToolTipText("http://baidu.com");
//提示文字
}
}
P174.2 文本框 JTextField
package Swing0402;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class MyFrame extends JFrame
{
JLabel label = new JLabel("姓名");
//注意:构造参数,16表示16列,用于计算宽度显示,并不是字符个数限制。
JTextField textField = new JTextField(16);
JButton button = new JButton("确定");
public MyFrame(String title)
{
super(title);
// 内容面板 (ContentPane)
Container contentPane = getContentPane();
contentPane.setLayout(new FlowLayout());
//添加控件
contentPane.add(label);
contentPane.add(textField);
contentPane.add(button);
//按钮点击处理
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
onButtonOK();
}
});
}
//事件处理
private void onButtonOK(){
// 取得用户的文本
String str = textField.getText();
//消息提示框。展示对话
// 这个是静态方法,可以直接调用,没有必要创建对象后,再去调用。
// 类名+方法名。
JOptionPane.showMessageDialog(this,"输入了:"+ str);
}
}
P184.3 复选框 JCheckBox
package Swing0403;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class MyFrame extends JFrame
{
JCheckBox cbx = new JCheckBox("订阅邮件通知!");
JTextField email = new JTextField(16);
public MyFrame(String title)
{
super(title);
// 内容面板 (ContentPane)
Container contentPane = getContentPane();
contentPane.setLayout(new FlowLayout());
//添加控件
contentPane.add(cbx);
contentPane.add(email);
// 默认选中
cbx.setSelected(true);
email.setToolTipText("输入邮箱地址:");
//按钮点击处理
cbx.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
// 如果未选中,则禁用文本框
if(cbx.isSelected())
email.setEnabled(true);
else
email.setEnabled(false);
// 注: cbx, email都是外部类里属性,完整写法是 MyFrame.this.cbx
// 注:可以简写为 email.setEnabled(cbx.isSelected())
}
});
}
}
P194.4 下拉列表 JComboBox
一、基本用法
1 创建 JComoboBox
JComboBox colorList = new JComboBox<>();
可见,JComboBox 是一个泛型,参数类型T 表示是的数据项的类型
2 添加数据项
colorList.addItem(“红色”);
colorList.addItem(“蓝色”);
colorList.addItem(“绿色”);
addItem ( T ) ,T的类型在创建时指定,这里是 String 类型,也就是每一项Item的数据类型是String
3 按索引访问
getSelectedIndex() : 获取选中项的索引
setSelectedIndex() : 设置选中项
remove ( index ) :按索引删除
4 按数据项访问
getSelectedItem()
setSelectedItem()
remove ( item )
5 事件处理
还是 ActionListener 方式
二、高级用法
充分利用泛型的特点,自定义一个ListOption类作为Item的类型。
JComboBox colorList
colorList.addItem( new ListOption(“红色”, Color.RED));
(1) 注意重写 toString() ,用于列表项的显示
(2) getSelectedItem() 返回的类型,正是这个 ListOption 类型
其实很简单,就是指定每个Item的类型是 ListOption 类型的对象
响应选择事件
package Swing0404;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class MyFrame extends JFrame
{
// JComboBox就一个泛型 , 参数类型是数据项的类型
JComboBox<String> colorList = new JComboBox<>();
JLabel sampleText = new JLabel("文本样例 This is a sample");
public MyFrame(String title)
{
super(title);
// 内容面板 (ContentPane)
Container contentPane = getContentPane();
contentPane.setLayout(new FlowLayout());
//添加控件
contentPane.add(colorList);
contentPane.add(sampleText);
colorList.addItem("红色");
colorList.addItem("蓝色");
colorList.addItem("绿色");
//按钮点击处理
colorList.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
updateTextColor();
}
});
}
// 更新 JLabel 的颜色的显示
private void updateTextColor()
{
// 获取选中项的值
String item = (String)colorList.getSelectedItem();
// 根据选中的颜色,设置JLabel文字颜色
Color color = null;
if( item.equals( "红色"))
color = Color.RED;
else if(item.equals("蓝色"))
color = Color.BLUE;
else if(item.equals("绿色"))
color = Color.GREEN;
sampleText.setForeground(color);
}
}
进阶版:listOption
package Swing0404;
import javax.swing.*;
public class SwingDemo2
{
private static void createGUI()
{
// JFrame指一个窗口,构造方法的参数为窗口标题
MyFrame2 frame = new MyFrame2("Swing Demo");//传递参数给构造方法
// 当关闭窗口时,退出整个程序 (不懂的话没事,照抄即可,这一行不是重点)
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 设置窗口的其他参数,如窗口大小
frame.setSize(400, 300);
// 显示窗口
frame.setVisible(true);
}
public static void main(String[] args)
{
// 此段代码间接地调用了 createGUI(),具体原理在 Swing高级篇 里讲解
// 初学者先照抄此代码框架即可
SwingUtilities.invokeLater(new Runnable() {
public void run()
{
createGUI();
}
});
}
}
P204.5 (练习) 彩色标签
package my;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
public class MyFrame2 extends JFrame
{
public MyFrame2(String title)
{
super(title);
// 内容面板 (ContentPane)
Container contentPane = getContentPane();
contentPane.setLayout(new FlowLayout());
/*
JLabel a1 = new JLabel("1");
// 设置背景为不透明 (默认透明 )
a1.setOpaque(true);
// 设置背景色
a1.setBackground(Color.YELLOW);
// 设置最佳尺寸
a1.setPreferredSize(new Dimension(60,30));//Dimension尺寸
// 设置水平对齐
a1.setHorizontalAlignment(SwingConstants.CENTER);
*/
JLabel a1 = new ColorfulLabel("1", Color.YELLOW);
JLabel a2 = new ColorfulLabel("2", Color.GREEN);
JLabel a3 = new ColorfulLabel("3", Color.LIGHT_GRAY);
JLabel a4 = new ColorfulLabel("4", Color.CYAN);
contentPane.add(a1);
contentPane.add(a2);
contentPane.add(a3);
contentPane.add(a4);
}
private static class ColorfulLabel extends JLabel
{
public ColorfulLabel(String text, Color bgColor)
{
super(text);
setOpaque(true);
setBackground(bgColor);
setPreferredSize(new Dimension(60,30));
setHorizontalAlignment(SwingConstants.CENTER);
}
}
}