Swing标签组件

那个我朋友说可以一次介绍完,也是,一个简单的组件,非要说这么麻烦,有点小题大作了,就先把这个讲完了在去做之前的知识点,之前是因为我有一天一直想找一个知识点,但找不到,一搜索就是CSDN,但是看就要开VIP,然后我就想我也可以将文章发在这上面,一方面监督我的学习,一方名做个笔记,其实这些组件我一个小时就看完了,所以我朋友说的也有点道理,今天就直接把剩余的组件一块说了。

标签组件

Swing中的标签只有一个目的,显示,显示文本或者是图。JLabel是一个最简单的标签组件,当然,看过了前面文章的都知道,这里要注意,JLabel 是 Swing 中唯一的专用标签组件。支持文本、图标、HTML、快捷键等丰富特性。通过自定义 LabelUI 或继承 JLabel 实现复杂样式。

这个组件也比较好理解,我个人的理解是相当于HTML中的<p>,当然,这两个是不同的。那么就直接来展示吧!

package chapter4;

import javax.swing.*;
import java.awt.*;

public class JLabel_Test {
    public static void main(String[] args) {
        JFrame jFrame = new JFrame("测试");
        jFrame.setLayout(new GridBagLayout());//设置布局管理器
        JLabel jLabel = new JLabel("这是标签组件的显示文本功能");
        jLabel.setPreferredSize(new Dimension(200,200));
        jLabel.setBackground(Color.red);
        jLabel.setOpaque(true); // 必须设置不透明属性才能显示背景色
        jFrame.add(jLabel);
        jFrame.setSize(500,500);
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 建议补充关闭操作
        jFrame.setVisible(true);
    }
}

如果我们实例化的时候换成这一句代码,那么标签就可以直接显示图片,这里注意引用路径。

JLabel jlabel = new JLabel(new ImageIcon("文件路径"));

那么JLabel的功能就介绍完了。注意,它本身不是一个容器,就是一个显示文本或者图像的一个组件,只能被添加到其他的容器中去。 当然这里展示的是单独显示文字或者是图像,也可以两者同时显示

JLabel compoundLabel = new JLabel("带图文本", icon, SwingConstants.RIGHT);

 可以使用对齐方法进行控制文本内容。

这里我给大家用表格列举一些常用的方法

分类方法/参数可选值/示例默认值注意事项
文本控制setText(String text)label.setText("<html>带<b>样式</b>文本</html>")空字符串支持HTML标签实现多行/图文混排
getText()String content = label.getText()-返回原始文本(包含HTML标签)
图标控制setIcon(Icon icon)label.setIcon(new ImageIcon("icon.png"))null推荐使用ImageIO读取保证跨平台兼容性
getIcon()ImageIcon icon = (ImageIcon)label.getIcon()-需做类型转换
对齐方式setHorizontalAlignment(int)JLabel.LEFT<br>JLabel.CENTER<br>JLabel.RIGHT<br>JLabel.LEADING(推荐)JLabel.LEADINGLEADING根据LTR/RTL语言自动适配

setVerticalAlignment

(int)

JLabel.TOP<br>JLabel.CENTER<br>JLabel.BOTTOMJLabel.CENTER图文混合时效果更明显
样式控制setFont(Font)new Font("微软雅黑", Font.BOLD|Font.ITALIC, 14)继承容器字体使用逻辑字体名保证跨平台
setForeground(Color)Color.RED<br>new Color(255,0,0)系统文本色优先使用预定义颜色常量
setBackground(Color)label.setOpaque(true);<br>label.setBackground(Color.YELLOW);透明★ 必须设置setOpaque(true)生效
状态控制setEnabled(boolean)label.setEnabled(false) → 灰色效果true禁用时同时影响文本和图标
setToolTipText(String)label.setToolTipText("<html>多行<br>提示")null支持HTML实现复杂提示
高级特性

setDisplayedMnemonic

(char)

label.setDisplayedMnemonic('S');需配合关联组件使用
setLabelFor(Component)label.setLabelFor(textField); → Alt+S聚焦输入框null实现无障碍访问的重要设置

按钮组件 

按钮组件好理解吧,就是一个按钮,像灯一样的按钮。不过功能上更加的复杂,JButton是Swing体系中最基础的交互组件,不仅支持文本/图标显示,还具备完整的用户交互能力。与JLabel的被动显示不同,JButton具有多种交互状态(悬停、按下、禁用等),可绑定事件响应,是实现用户操作的核心组件。也就是说这个按钮是一个“有生命的”组件,可以于用户产生互动的一个组件。

来看如何实现一个基本按钮:

package chapter4;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;

public class JButton_Test {
    public static void main(String[] args) {
        JFrame frame = new JFrame("按钮测试");
        frame.setLayout(new GridBagLayout());

        // 创建基础按钮
        JButton button = new JButton("点击提交");
        button.setPreferredSize(new Dimension(180, 60));
        button.setBackground(new Color(70, 130, 180));
        button.setForeground(Color.WHITE);
        button.setFont(new Font("微软雅黑", Font.BOLD, 14));
        

        frame.add(button);
        frame.setSize(400, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

可以看到这是一个最基本的按钮组件,没有任何的功能,这里我不介绍监听,因为这个放在后面来看比较合适,这里就单纯的介绍一个简单的按钮组件。

那么按钮的常用的方法也是和其他的组件大同小异的,这里也使用AI直接生成一些常用方法的总结

分类方法/参数默认值注意事项
基础属性setText(String)<br>getText()支持HTML实现图文混排
setMnemonic(int)btn.setMnemonic(KeyEvent.VK_S)Alt+S触发点击
图标控制setIcon(Icon)<br>setRolloverIcon(Icon)<br>setPressedIcon(Icon)null建议准备4种状态图标
样式控制setBackground(Color)<br>setBorder(Border)系统默认推荐使用BorderFactory创建边框
setFocusPainted(boolean)btn.setFocusPainted(false)取消焦点虚线框
交互事件addActionListener支持多个监听器
setSelected(boolean)配合ButtonGroup使用实现单选按钮组
状态控制setEnabled(boolean)true禁用时自动应用disableIcon
setToolTipText(String)btn.setToolTipText("<html>多行提示")支持富文本
高级特性setModel(ButtonModel)Default扩展按钮交互逻辑
doClick()btn.doClick(500)程序触发点击动画(500ms)

 文本组件

Swing提供多层级文本输入支持,从基础单行输入到富文本编辑器,满足不同场景需求。核心组件包括:JTextField(单行输入)、JTextArea(多行文本)、JPasswordField(密码输入)、JEditorPane(HTML/RTF渲染)。这四个文本组件比较好理解,一个四单行文本,一个是文本域,一个是带有输入之后显示为*号的密码输入,还有一个是文本渲染,可以说还是结构比较清晰。直接上代码

package chapter4;

import javax.swing.*;
import java.awt.*;

public class TextComponentDemo {
    public static void main(String[] args) {
        JFrame frame = new JFrame("文本输入组件");
        frame.setLayout(new GridLayout(3, 1, 5, 5)); // 3行1列,间距5像素

        // 1. 单行文本框
        JTextField textField = new JTextField(20); // 20列宽度
        textField.setBorder(BorderFactory.createTitledBorder("普通输入"));

        // 2. 密码输入框
        JPasswordField passwordField = new JPasswordField(20);
        passwordField.setBorder(BorderFactory.createTitledBorder("密码输入"));
        passwordField.setEchoChar('*'); // 设置密码掩码

        // 3. 多行文本域(自动带滚动条)
        JTextArea textArea = new JTextArea(5, 20); // 5行20列
        JScrollPane scrollPane = new JScrollPane(textArea);
        scrollPane.setBorder(BorderFactory.createTitledBorder("多行文本"));

        // 添加组件
        frame.add(textField);
        frame.add(passwordField);
        frame.add(scrollPane);

        frame.setSize(300, 400);
        frame.setLocationRelativeTo(null); // 窗口居中
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

这里我也是用代码实现了3种常用的JText文本组件的使用,那么文本组件有没有什么特别注意的地方呢,这里文本组件的构造方法也有不同,

以下是JText的常用方法的表格示例:

方法名称描述示例代码
setText(String text)设置组件文本内容textField.setText("Hello")
getText()获取组件文本内容String content = area.getText()
setEditable(boolean b)设置文本可编辑状态textPane.setEditable(false)
setFont(Font font)设置文本字体field.setFont(new Font("宋体", Font.PLAIN, 12))
setForeground(Color c)设置文本颜色area.setForeground(Color.BLUE)
setCaretPosition(int pos)设置光标位置textPane.setCaretPosition(0)
selectAll()全选文本内容field.selectAll()
getSelectedText()获取选中文本String sel = area.getSelectedText()
append(String str)追加文本area.append("new text\\n")

Jpassword的特有方法:

方法名返回值类型参数功能说明
getPassword()char[]获取密码字符数组(比getText()更安全)
setEchoChar(char)voidchar echoChar设置密码显示掩码字符(如*
getEchoChar()char获取当前使用的掩码字符
echoCharIsSet()boolean检测是否设置了掩码字符

注意:继承自JTextFieldgetText()方法已被标记为@Deprecated,建议使用getPassword()替代以保证安全性。

当然,我们在学习过程中使用AI确实方便,但是这些方法我还是认为有必要要了解一遍,至少知道运行结果和功能是什么,不希望直接使用。这里我使用了ai优化了表格,添加的都是一些常用的方法。

菜单组件

所谓菜单组件,最直观的就是网页上面有好多类别的文章,这就是菜单组件

菜单组件一样的,肯定有基本的菜单,也有一些变体,实际上它们怎么变都是菜单,不会难到哪里去。那么我是用思维导图直接给出结构。

 

比价简单,菜单,菜单项,菜单条,单选菜单,多选菜单,。五个结构,

菜单条就是顶部那一条有菜单的位置,里面有菜单,菜单里面有菜单项,单选菜单,多选菜单等。

直接用代码来显示效果,

我用代码实现了基本的菜单,当然,只有样子,没有实际的功能。

package chapter4;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;

public class MenuComponentDemo {
    public static void main(String[] args) {
        JFrame frame = new JFrame("菜单组件示例");
        frame.setLayout(new BorderLayout());
        // 创建菜单条

        JMenuBar menuBar = new JMenuBar();
        // 文件菜单(基本菜单)
        JMenu fileMenu = createFileMenu();
        // 视图菜单(多选菜单)
        JMenu viewMenu = createViewMenu();
        // 语言菜单(单选菜单)
        JMenu languageMenu = createLanguageMenu();

        // 将菜单添加到菜单条
        menuBar.add(fileMenu);
        menuBar.add(viewMenu);
        menuBar.add(languageMenu);
        frame.setJMenuBar(menuBar);

        // 窗口属性设置
        frame.setSize(450, 300);  // 加宽窗口以适应新菜单
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);


    }

    // ======================= 新增语言菜单构造方法 =======================
        private static JMenu createLanguageMenu() {
        JMenu languageMenu = new JMenu("语言");
        languageMenu.setMnemonic('L');  // 快捷键 Alt+L

        // 创建单选按钮组
        ButtonGroup languageGroup = new ButtonGroup();

        // 语言选项
        JRadioButtonMenuItem chineseItem = new JRadioButtonMenuItem("中文");
        JRadioButtonMenuItem englishItem = new JRadioButtonMenuItem("英文");
        JRadioButtonMenuItem japaneseItem = new JRadioButtonMenuItem("日文");

        // 加入按钮组
        languageGroup.add(chineseItem);
        languageGroup.add(englishItem);
        languageGroup.add(japaneseItem);

        // 设置默认选中
        chineseItem.setSelected(true);

        languageMenu.add(chineseItem);
        languageMenu.add(englishItem);
        languageMenu.add(japaneseItem);

        return languageMenu;
    }


    private static JMenu createFileMenu() {
        JMenu fileMenu = new JMenu("文件");
        fileMenu.setMnemonic('F'); // 快捷键 Alt+F

        // 1. 新建菜单项
        JMenuItem newItem = new JMenuItem("新建", KeyEvent.VK_N);
        // 2. 打开菜单项
        JMenuItem openItem = new JMenuItem("打开", KeyEvent.VK_O);
        // 3. 保存菜单项
        JMenuItem saveItem = new JMenuItem("保存", KeyEvent.VK_S);
        // 4. 退出菜单项
        JMenuItem exitItem = new JMenuItem("退出", KeyEvent.VK_X);

        // 添加组件到菜单
        fileMenu.add(newItem);
        fileMenu.add(openItem);
        fileMenu.add(saveItem);
        fileMenu.addSeparator(); // 分隔线
        fileMenu.add(exitItem);

        return fileMenu;
    }

    private static JMenu createViewMenu() {
        JMenu viewMenu = new JMenu("视图");
        viewMenu.setMnemonic('V');

        JCheckBoxMenuItem checkBoxItem1 = new JCheckBoxMenuItem("显示工具栏");
        checkBoxItem1.setMnemonic('T'); // 设置快捷键 Alt+T
        checkBoxItem1.setSelected(true); // 默认选中

        JCheckBoxMenuItem checkBoxItem2 = new JCheckBoxMenuItem("显示状态栏");
        checkBoxItem2.setMnemonic('S'); // 设置快捷键 Alt+S

        // 将菜单项添加到视图菜单
        viewMenu.add(checkBoxItem1);
        viewMenu.add(checkBoxItem2);
        viewMenu.addSeparator(); // 添加分隔线(可选)

        return viewMenu;
    }

}

菜单组件的常用方法

方法名称描述示例代码
add(JMenu menu)将菜单添加到菜单条menuBar.add(fileMenu);
add(JMenuItem item)将菜单项添加到菜单fileMenu.add(newItem);
addSeparator()添加分隔线fileMenu.addSeparator();
setMnemonic(char key)设置菜单的快捷键fileMenu.setMnemonic('F');
setAccelerator(KeyStroke)设置菜单项的快捷键组合newItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.CTRL_MASK));
setSelected(boolean b)设置复选菜单项的选择状态showStatusBarItem.setSelected(true);
isSelected()获取复选菜单项的选择状态boolean isSelected = showStatusBarItem.isSelected();

细节分享

  1. 快捷键设置:使用 setMnemonic 和 setAccelerator 方法可以为菜单项设置快捷键,提高用户体验。
  2. 动作监听器:通过 addActionListener 方法可以为菜单项添加动作监听器,实现点击菜单项时的响应逻辑。
  3. 复选菜单项JCheckBoxMenuItem 可以用于创建复选菜单项,通过 setSelected 和 isSelected 方法可以控制和获取其选择状态。
  4. 分隔线:使用 addSeparator ,看个人的喜好,一般桌面应用都用这个。

可以说,我们在使用菜单组件的时候,需要按照个人的需求去使用,菜单一般是配合监听使用的,我们点击了菜单,就要发生具体的一个功能,如何去实现这些功能才是重要的,菜单只是用来给用户看的,我们作为后面具体的功能实现者一定要结构清晰。

 组件其实有很多,这四大类已经可以建立一个基本的GUI图形用户界面了,组件我使用deepseek总结了,如果你想学习更多的组件,可以看下面的这个表格

组件名称类型/分类核心功能典型应用场景
JToolBar工具栏容器创建可拖动的工具栏,存放常用操作按钮快速访问工具(如编辑器工具栏)
JRadioButton选择控件单选按钮(需配合 ButtonGroup 使用)互斥选项(如性别选择)
JList列表控件显示一维数据列表(支持单选或多选)简单列表展示(如文件列表)
JTree高级控件展示树形结构数据(支持节点展开/折叠)文件目录结构、组织架构图
JFileChooser对话框打开或保存文件的系统对话框文件上传、保存路径选择
JColorChooser对话框颜色选择器绘图工具颜色设置
JProgressBar进度控件显示任务进度(水平或垂直样式)文件下载、任务执行进度
JSlider滑动控件通过滑块选择数值范围音量控制、亮度调节
JSpinner输入控件数值增减器(通过上下箭头调整数值)数量选择、日期选择
JOptionPane对话框工具快速生成标准对话框(确认框、输入框、消息框)提示用户确认操作或输入信息

这些是我没有提到的一些组件,具体的效果可以自行尝试。组件学习笔记也到此结束,明天没有课,更新布局管理器。最后给一个总体的结构图,也就是我的第一篇文章提到的一个总体结构图,记住了,计算机中图简直是我认为最能理解的东西了。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值