Swing2_b站

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);
		}
	}
}

P21※ 举一反三学习法

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值