1. 组件概述
(1) 说明
组件组成Java 的图形界面的各个元素,按照不同的功能,可分为 顶层容器、中间容器、基本组件。顶层容器为java.awt.Window的子类,有JFrame、JDialog等。中间容器和基础组件都为javax.swing.JComponent的子类,常用的中间容器有JPanel、ScrollPane、JSplitPane、JTabbedPane、JLayeredPane、JMenuBar、JToolBar、JPopupMenu、JInternalFrame等,常用的基础组件有JLabel、JButton、JRadioButton、JCheckBox、JToggleButton、JTextField、JPasswordField、JTextArea、JComboBox、JList、JProgressBar、JSlider等。
2. JFrame - 窗体
(1) 说明
一个顶层的框架类,是屏幕上window的对象,能够最大化、最小化、关闭。JFrame好比窗户框,其他容器(例如JPanel )就是玻璃。
(2)示例
1 JFrame jFrame = new JFrame();
//设置窗口大小,也可通过setBounds设置位置和大小,可以使用pack方法设置最佳大小。
jFrame.setSize(1000, 800);
//窗口居中显示,也可通过setLocation或setBounds方法设置显示位置。
jFrame.setLocationRelativeTo(null);
//标题
jFrame.setTitle("标题");
//图标
jFrame.setIconImage(null);
//设置默认窗口关闭操作,常用直接退出程序
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//菜单栏加到窗口中
jFrame.setJMenuBar(ModuleUtils.initJMenuBar());
//设置窗口是否可调整大小,默认窗口可调整大小
jFrame.setResizable(false);
//撤销当前窗口并释放所有使用的资源,可用于页面跳转关闭当前窗口
//jFrame.dispose();
//往窗口中添加组件,JFrame默认为边界布局,可分别往上下左右中5部分添加组件
jFrame.add(new JLabel("组件"), BorderLayout.WEST);
//设置窗口是否可见,默认窗口是不可见的
jFrame.setVisible(true);
3. JDialog - 对话框
(1) 说明
主要用于一个窗体中弹到另一个窗体中。
(2) 示例
JButton jButton=new JButton("弹框");
jButton.setSize(100,50);
jButton.addActionListener(e->{
//模态对话框,在不处理当前对话框之前无法进行其他操作。
JDialog dialog = new JDialog(jFrame,"对话框",true);
dialog.setSize(200, 300);//设置其大小
dialog.setLocation(100, 100);//设置其位置
dialog.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);//设置关闭模式
dialog.add(new JTextField());//设置组件
dialog.setVisible(true);//设置可见
});
4. JApplet - applet框
(1) 说明
JApplet 类是用来建立 java 小应用程序用的。
(2) 示例
5. JPanel - 面板
(1) 说明
JPanel 是 Java图形界面的面板容器类,是一种轻量级容器,可以加入到JFrame窗体中。JPanel默认的布局管理器是FlowLayout,功能是对窗体上的各种控件进行组合。
(2) 示例
//新建面板
JPanel jPanel=new JPanel();
jPanel.setBounds(50,50,300,200);//在指定位置和大小,绝对布局有效
jPanel.setLayout(new FlowLayout(FlowLayout.LEFT));//设置布局,默认为居中流布局
jPanel.setBackground(Color.BLUE); //设置背景色
jPanel.add(new JButton("按钮"));//添加组件
jPanel.setBorder(BorderFactory.createLineBorder(Color.RED,2));//设置边框
6. JScrollPane - 滚动面板
(1) 说明
JScrollPane是一个带有滚动条的面板,面板上只能添加一个组件。如果想向JScrollPane面板中添加多个组件,应该先将多个组件添加到某个组件中,然后将这个组件添加到JScrollPane中。
(2) 示例
//新建面板
JScrollPane jScrollPane=new JScrollPane ();
//新建组件,滚动面板需要展示的组件
JPanel jPanel=new JPanel();
jPanel.setPreferredSize(new Dimension(500,1000));
jScrollPane.setBounds(50,50,300,200);//在指定位置和大小,绝对布局有效
jScrollPane.setViewportView(jPanel);//滚动面板展示的组件组件
jScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);//设置水平滚动条策略
jScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);//设置垂直滚动条策略
jScrollPane.setBorder(BorderFactory.createLineBorder(Color.RED,2));//设置边框
jFrame.add(jScrollPane);
7. JLayeredPane - 分层面板
(1) 说明
为容器添加了深度,允许组件在需要时互相重叠。
(2) 示例
//新建面板
JLayeredPane jLayeredPane=new JLayeredPane ();
jLayeredPane.setLayout(null);
//新建组件,滚动面板需要展示的组件
JPanel jPanel1=new JPanel();
jPanel1.setBounds(10,10,100,100);
jPanel1.setBackground(Color.BLUE);
JPanel jPanel2=new JPanel();
jPanel2.setBounds(60,60,100,100);
jPanel2.setBackground(Color.RED);
JPanel jPanel3=new JPanel();
jPanel3.setBounds(110,110,100,100);
jPanel3.setBackground(Color.GREEN);
//可设置组件层级,最大数的组件在最外层.默认放到层内最底部
jLayeredPane.add(jPanel1,new Integer(2));
jLayeredPane.add(jPanel2,new Integer(3));
jLayeredPane.add(jPanel3,new Integer(1));
jFrame.add(jLayeredPane);
8. JRootPane - 根面板
(1) 说明
该面板是在 JFrame 窗体创建时就默认添加进来的,是所有其他面板的载体或父级,他覆盖窗体的除标题栏和边条之外的整个表面。根面板默认是不可见的。根面板负责管理其他面板(层面板,玻璃面板),如使其他面板覆盖整个JFrame 窗体等。
(2) 示例
9. JInternalPane - 内部窗口
(1) 说明
(2) 示例
10. JTabbedPane - 选项卡窗格
(1) 说明
JTabbedPane可以用于创建具有多个功能选项卡的应用程序界面,每个选项卡都有一个标题和一个面板,用户可以点击选项卡来切换到相应的面板。
(2) 示例
JPanel jPanel1 = new JPanel();//选项卡1容器
JPanel jPanel2 = new JPanel();//选项卡2容器
//定义选项卡,可设置选项卡标签位置及布局策略。默认:TOP, WRAP_TAB_LAYOUT
JTabbedPane jTabbedPane=new JTabbedPane(JTabbedPane.TOP,JTabbedPane.SCROLL_TAB_LAYOUT);
//添加选项卡
jTabbedPane.addTab("选项卡1",jPanel1);
jTabbedPane.addTab("选项卡2",jPanel2);
jTabbedPane.setSelectedIndex(1); // 设置指定索引选项卡被选中
jTabbedPane.setEnabledAt(0, false); // 设置指定索引选项卡不可用
jTabbedPane.addChangeListener(e->{//切换事件
// 获得被选中选项卡的索引
int selectedIndex = jTabbedPane.getSelectedIndex();
// 获得指定索引的选项卡标签
String title = jTabbedPane.getTitleAt(selectedIndex);
System.out.println(title);
});
jFrame.add(jTabbedPane);
11. JSplitPane - 分割面板
(1) 说明
JSplitPane 用于创建可拖动的分割面板,将一个容器分割为两个可调整大小的子面板。它提供了用户界面中显示和控制两个组件的分割线,可以让用户根据需要调整两个子面板的大小。
(2) 示例
JSplitPane jSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,new JLabel("左"),new JLabel("右"));
jSplitPane.setPreferredSize(new Dimension(100,100));
jSplitPane.setContinuousLayout(false);//设置是否连续重新显示组件,
jSplitPane.setDividerSize(10);//分割线宽度
jSplitPane.setDividerLocation(30);
//jSplitPane.setLeftComponent(Componentcomp); //将组件设置到分隔条的左边。
//jSplitPane.setTopComponent(Component comp);// 将组件设置到分隔条的上面。
//jSplitPane.setRightComponent(Component comp);//将组件设置到分隔条的右边。
//jSplitPane.setBottomComponent(Component comp);//将组件设置到分隔条的下面。
12. JMenuBar - 菜单栏
(1) 说明
JMenuBar是用于制作菜单栏时用到的一个组件。菜单组件是由多个类组成的,主要有:JMenuBar(菜单栏)、JMenu(菜单)、JMenuItem(菜单项)和JPopupMenu(弹出菜单).每个菜单组件都包含一个菜单栏,每个菜单栏又包含若干个菜单,每个菜单包含若干个菜单项。菜单项的作用与按钮类似,当用户单击时产生一个命令动作。
(2) 示例
JMenuBar jMenuBar=new JMenuBar(); //创建菜单栏
JMenu jMenu1=new JMenu("一级菜单");
JMenu jMenu2=new JMenu("二级菜单");
JMenuItem jMenuItem=new JMenuItem("菜单项");
jMenuItem.addActionListener(e->{
//TODO 菜单项点击事件
});
jMenu1.add(jMenu2);//一级菜单添加二级菜单
jMenu2.add(jMenuItem);//二级菜单添加菜单项
jMenuBar.add(jMenu1);//菜单栏添一级加菜单
jFrame.setJMenuBar(jMenuBar);//在窗口里添加菜单栏
//复选框、单选框菜单项
JMenu jMenu=new JMenu("菜单");
JCheckBoxMenuItem jCheckBoxMenuItem=new JCheckBoxMenuItem("复选框");
JRadioButtonMenuItem jRadioButtonMenuItem=new JRadioButtonMenuItem("单选框");
JMenuItem jMenuItem=new JMenuItem("按钮");
jMenu.add(jCheckBoxMenuItem);
jMenu.add(jRadioButtonMenuItem);
jMenu.add(jMenuItem);
jMenuBar.add(jMenu);
jPanel.add(jMenuBar);
13. JPopupMenu - 弹出式菜单
(1) 说明
弹出菜单是非常常见的一种控件。它通常由鼠标右击事件触发,比如在windows系统桌面上右击时,会弹出一个包含“刷新”、“属性”等菜单的弹出菜单。
(2) 示例
JPanel jPanel=new JPanel();
//弹框菜单
JPopupMenu jPopupMenu = new JPopupMenu("Edit");
//添加菜单及菜单项,中间都为菜单,最后一级为菜单项,可绑定事件
JMenu jMenu=new JMenu("粘贴");
JMenuItem jMenuItem1 = new JMenuItem("复制");
JMenuItem jMenuItem2 = new JMenuItem("粘贴文本");
JMenuItem jMenuItem3 = new JMenuItem("粘贴原格式文本");
jMenu.add(jMenuItem2);
jMenu.add(jMenuItem3);
jPopupMenu.add(jMenuItem1);
jPopupMenu.add(jMenu);
//为窗口添加鼠标事件,点击右键在点击位置显示弹框菜单
jFrame.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if(e.getButton()==MouseEvent.BUTTON3){//鼠标点击右键
//在点击位置弹出菜单
jPopupMenu.show(jFrame,e.getX(),e.getY());
}
}
});
//添加到指定容器
jPanel.add(jPopupMenu);
14 JToolBar - 工具栏
(1) 说明
JToolBar 提供了一个用来显示常用的控件(按钮)的组件,而且可以在程序的主窗口之外浮动或是托拽。
(2) 示例
//创建工具条,设置名称、方向。
JToolBar jToolBar=new JToolBar("工具条",SwingConstants.HORIZONTAL);
jToolBar.add(new JButton("功能1"));
jToolBar.addSeparator();设置分隔
jToolBar.add(new JButton("功能2"));
jToolBar.setBackground(Color.lightGray);//背景色
15. JLabel - 标签
(1) 说明
JLabel组件用来显示文本和图像,可以只显示其一种,也可以同时显示。
(2) 示例
JLabel jLabel = new JLabel("内容");
jLabel.setSize(400,300);
BufferedImage img = ImageIO.read(new File("D:\\pictures\\12.jpg"));
Image image = img.getScaledInstance(jLabel.getWidth(), jLabel.getHeight(), Image.SCALE_SMOOTH);
jLabel.setIcon(new ImageIcon(image));//设置和JLabel等大的图片
jLabel.setForeground (Color.BLUE);//设置字体颜色
jLabel.setFont (new Font("宋体", Font.BOLD, 30));//设置字体风格、大小
jLabel.setBorder (BorderFactory.createLineBorder(Color.GREEN));//设置组件JLabel标签的边框线
jLabel.setCursor (new Cursor(Cursor.HAND_CURSOR));//设置当鼠标触碰标签时,鼠标的样式。
jLabel.setOpaque (true);//关闭透明度
jLabel.setBackground (Color.yellow);//设置背景,需要将透明度关闭
// 设置文本相对于图片的位置(文本默认在图片右边垂直居中)
jLabel.setHorizontalTextPosition (SwingConstants.RIGHT);
jLabel.setVerticalTextPosition (SwingConstants.CENTER);
// 设置标签内容(在标签内)的对其方式(默认左对齐并垂直居中)
jLabel.setHorizontalAlignment(SwingConstants.CENTER);
jLabel.setVerticalAlignment( SwingConstants.CENTER);
jLabel.setIconTextGap(10);// 设置图片和文本之间的间隙
jLabel.setToolTipText("提示");// 当鼠标移动到组件上时显示的提示文本
jLabel.setVisible(true);// 设置组件是否可见
jLabel.setMinimumSize(new Dimension(10,2));// 设置组件的 最小 大小
jLabel.setMaximumSize(new Dimension(200,40));// 设置组件的 最大 大小
jPanel.add(jLabel);
16. JButton - 按钮
(1) 说明
JButton组件是最简单的按钮组件,在按下和释放2个状态之间进行切换,可以通过捕捉按下并释放的动作执行一些操作,从而完成和用户之间的交互。
(2) 示例
JPanel jPanel = new JPanel();
//按钮三种状态图标
Image image1 = ImageIO.read(new File("D:\\pictures\\3.png")).getScaledInstance(100, 50, Image.SCALE_SMOOTH);
Image image2 = ImageIO.read(new File("D:\\pictures\\2.png")).getScaledInstance(100, 50, Image.SCALE_SMOOTH);
Image image3 = ImageIO.read(new File("D:\\pictures\\4.png")).getScaledInstance(100, 50, Image.SCALE_SMOOTH);
JButton jButton=new JButton("点击");
jButton.setPreferredSize(new Dimension(100,50));//设置首选大小
// 设置文本相对于图片的位置(文本默认在图片右边垂直居中)
jButton.setHorizontalTextPosition (JButton.CENTER);
jButton.setVerticalTextPosition(JButton.CENTER);
jButton.setIcon(new ImageIcon(image1));//鼠标未在按钮上显示的图标。
jButton.setPressedIcon(new ImageIcon(image2));//鼠标按下时显示的图标。
jButton.setRolloverIcon(new ImageIcon(image3));//鼠标经过时的图标。
jButton.setBorderPainted(false);//是否显示边框
jButton.setContentAreaFilled(true);//是否内容区填充
jButton.setIconTextGap(10);//设置图片与文本间距
jButton.setFocusPainted(false);//是否绘制焦点(例如浅色虚线框或者加粗的边框表明按钮当前有焦点)。
jButton.setMnemonic(KeyEvent.VK_A);//设置快捷建,ALT+A 可点击按钮
jButton.setToolTipText("提示");
jButton.setFont(new Font("黑体",Font.PLAIN,24));
jButton.setMargin(new Insets(20,20,20,20));//设置内边距
jButton.setEnabled(true);//是否启用,默认为true
//jButton.doClick();//点击按钮
jButton.addActionListener(e->{
System.out.println("点击按钮");
});
jPanel.add(jButton);
17. JToggleButton - 切换按钮
(1) 说明
JToggleButton为开关按钮,是 JRadioButton, JCheckBox 的父类,主要实现一个按钮的两种状态(选中 和 未选中)来实现开关切换的效果。
(2) 示例
JToggleButton jToggleButton=new JToggleButton("状态");
jToggleButton.setSelected(true);//选中状态
jToggleButton.setEnabled(false);//是否启用
jToggleButton.setIcon(new ImageIcon());//关闭显示图标
jToggleButton.setPressedIcon(new ImageIcon());//打开显示图标
jToggleButton.setDisabledIcon(new ImageIcon());//禁用显示图标
jFrame.add(jToggleButton);
18. JRadioButton - 单选按钮
(1) 说明
JRadioButton为单选按钮,可以在给定的多个选择项中选择一个,并且只能选择一个。
(2) 示例
//创建单选按钮
JRadioButton jRadioButton1 = new JRadioButton("选项1");
JRadioButton jRadioButton2 = new JRadioButton("选项2");
//单选按钮设置按钮组,可实现单选联动
ButtonGroup group = new ButtonGroup();
group.add(jRadioButton1);
group.add(jRadioButton2);
jRadioButton1.addActionListener(e->{
JRadioButton jRadioButton = (JRadioButton) e.getSource();
//TODO 可通过按钮选中状态设置变量获取单选按钮选中值
});
//加到指定容器中
jFrame.add(jRadioButton1);
jFrame.add(jRadioButton2);
19. JCheckBox - 复选框
(1) 说明
JCheckBox 为复选按钮,可以在选中与不选择之间切换,多个时可以多选。
(2) 示例
//复选框
JCheckBox jCheckBox = new JCheckBox("选项");
//添加状态改变事件监听
jCheckBox.addItemListener(e -> {
JCheckBox jCheck = (JCheckBox) e.getSource();
System.out.println(jCheck.isSelected());
});
//加到指定容器中
jFrame.add(jCheckBox);
20. JTextField - 文本框
(1) 说明
JTextField 是一个轻量级组件,它允许编辑单行文本。
(2) 示例
JPanel jPanel = new JPanel();
JTextField jTextField=new JTextField();
jTextField.setPreferredSize(new Dimension(200,40));
jTextField.setText("内容");
jTextField.setSelectedTextColor(Color.BLUE); //文本选中后的颜色
jTextField.setForeground(Color.RED);//字体颜色
jTextField.setCaretColor(Color.DARK_GRAY);//设置光标颜色
jTextField.setDisabledTextColor(Color.YELLOW);//设置文本不可用时颜色
jTextField.setHorizontalAlignment(JTextField.RIGHT);//设置文本对齐
jTextField.setFont(new Font("Serief", Font.BOLD, 30));
jTextField.setEditable(false);//设置是否可编辑
String text = jTextField.getText();//获取文本框文本
jTextField.addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent e) {
System.out.println("获得焦点");
}
@Override
public void focusLost(FocusEvent e) {
System.out.println("失去焦点");
}
});
jTextField.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
System.out.println("输入:"+e.getKeyChar());
}
@Override
public void keyPressed(KeyEvent e) {
System.out.println("按下:"+e.getKeyChar());
}
@Override
public void keyReleased(KeyEvent e) {
System.out.println("放开:"+e.getKeyChar());
}
});
jTextField.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
System.out.println("新增");
}
@Override
public void removeUpdate(DocumentEvent e) {
System.out.println("删除");
}
@Override
public void changedUpdate(DocumentEvent e) {
System.out.println("修改");
}
});
jPanel.add(jTextField);
21. JPasswordField - 密码框
(1) 说明
JPasswordField是密码框,继承自 JTextField,只是显示输入的内容时用特定的字符替换显示(例如 * 或 ●),用法和 JTextField 基本一致。
(2) 示例
JPanel jPanel = new JPanel();
JPasswordField jPasswordField=new JPasswordField();
jPasswordField.setPreferredSize(new Dimension(200,40));
jPasswordField.setText("内容");
jPasswordField.setSelectedTextColor(Color.BLUE); //文本选中后的颜色
jPasswordField.setForeground(Color.RED);//字体颜色
jPasswordField.setCaretColor(Color.DARK_GRAY);//设置光标颜色
jPasswordField.setDisabledTextColor(Color.YELLOW);//设置文本不可用时颜色
jPasswordField.setHorizontalAlignment(JTextField.RIGHT);//设置文本对齐
jPasswordField.setFont(new Font("Serief", Font.BOLD, 30));
jPasswordField.setEditable(true);//设置是否可编辑
char[] password = jPasswordField.getPassword();//获取密码字节数组
jPasswordField.setEchoChar('*');//设置密码框默认显示的密码字符
jPasswordField.addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent e) {
System.out.println("获得焦点");
}
@Override
public void focusLost(FocusEvent e) {
System.out.println("失去焦点");
}
});
jPasswordField.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
System.out.println("输入:"+e.getKeyChar());
}
@Override
public void keyPressed(KeyEvent e) {
System.out.println("按下:"+e.getKeyChar());
}
@Override
public void keyReleased(KeyEvent e) {
System.out.println("放开:"+e.getKeyChar());
}
});
jPasswordField.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
System.out.println("新增");
}
@Override
public void removeUpdate(DocumentEvent e) {
System.out.println("删除");
}
@Override
public void changedUpdate(DocumentEvent e) {
System.out.println("修改");
}
});
jPanel.add(jPasswordField);
22. JTextArea - 文本域
(1) 说明
JTextArea 是一个显示纯文本的多行区域,它能接收多行文本的输入,使用JTextArea构造方法创建对象时可以设定区域的行数、列数。
(2) 示例
JPanel jPanel = new JPanel();
JTextArea jTextArea = new JTextArea(12, 34);
JScrollPane jScrollPane = new JScrollPane(jTextArea);
jTextArea.setEditable(false); // 设置文本域不可编辑
jTextArea.setLineWrap(true);//是否自动换行
jTextArea.append("文本\n");//追加文本
jTextArea.insert("1234",1);//在指定位置插入文本
jTextArea.replaceRange("6666",0,1);//替换指定区间的字符串
jTextArea.setText("设置文本");//设置文本,会清空已有文本
jPanel.add(jScrollPane);
23. JTextPane - 简单文本编辑器
(1) 说明
JTextPane 是JEditorPane 的子类,是一个可以编辑和显示html,rtf和普通文本的富文本组件。
(2) 示例
JPanel jPanel = new JPanel();
//样式上下文,可以添加多种样式,用时直接从上下文中取
StyleContext sc = StyleContext.getDefaultStyleContext();
Style style = sc.addStyle("Style",null);
SimpleAttributeSet set = new SimpleAttributeSet();//文档样式属性对象
StyleConstants.setForeground(set, Color.RED);//设置文本颜色
StyleConstants.setFontSize(set, 30);//设置文本大小
StyleConstants.setAlignment(set, StyleConstants.ALIGN_LEFT);//设置文本对齐方式
StyleConstants.setLeftIndent(set,10);//设置左边距
StyleConstants.setRightIndent(set,10);//设置右边距
style.addAttributes(set);//样式添加属性
DefaultStyledDocument doc = new DefaultStyledDocument(sc);
JTextPane jTextPane = new JTextPane(doc);
jTextPane.setText("内容");
jTextPane.setPreferredSize(new Dimension(400,300));//设置文本面板大小
// doc.setParagraphAttributes(0, doc.getLength(), set, false);//设置段落格式,可设置从哪到多长的文本
doc.insertString(doc.getLength(), "插入文本",sc.getStyle("Style"));//在指定位置插入文本,可带样式,doc.getLength()为文本后。
jPanel.add(jTextPane);
24. JEditorPane - 辑各种内容的文本组件
(1) 说明
JEditorPane的最主要功能在于展 现不同类型的文件格式内容,支持的文件类型有三种:第一种是纯文本类型,其类型的表示法为"text/plain",这种类型的文件就是我们最常使用的txt文件,这类型的文件可以用记事本或WordPad等文书编辑软件来编辑。第二种是RTF类型,其表示为"text/rtf",这种类型的文件特色是能对文字内容做字体缩放、变形、上色等特殊效果。第三类是HTML类型,其表示法为"text/html",这类文件的特色除了在对字体效果的表现之外还具有在文件 内加入图片、超级链接等相关功能。
(2) 示例
JEditorPane jEditorPane = new JEditorPane("https://www.w3cschool.cn/");
jEditorPane.setEditable(false); //请把editorPane设置为只读,不然显示就不整齐
jEditorPane.setContentType("text/html");//text/plain(纯文本)、text/rtf(rtf文本)、text/html(html文本)
//超链接事件
jEditorPane.addHyperlinkListener((HyperlinkEvent event) -> {
if (event.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
try {
jEditorPane.setPage(event.getURL());
} catch (IOException e) {
e.printStackTrace();
}
} else if (event.getEventType() == HyperlinkEvent.EventType.ENTERED) {
System.out.println("click this link");
} else if (event.getEventType() == HyperlinkEvent.EventType.EXITED) {
System.out.println("Ready");
}
});
jPanel.add(jEditorPane);
25. JComboBox - 下拉列表框
(1) 说明
JComboBox组件被称为下拉框或者组合框,它将所有选项折叠在一起,默认显示的是第一个添加的选项。当用户单击下拉框时,会出现下拉式的选择列表,用户可以从中选择其中一项并显示。该组件分为可编辑和不可编辑两种形式,对于不可编辑的下拉框,用户只能选择现有的选项列表。对于可编辑的下拉框,用户既可以选择现有的选项列表,也可以自己输入新的内容,应注意自己输入的内容只能作为当前项显示,并不会添加到下拉框的选项列表中。
(2) 示例
//下拉框数据
DefaultComboBoxModel boxModel = new DefaultComboBoxModel();
boxModel.addElement("Apple");
boxModel.addElement("Grapes");
boxModel.addElement("Mango");
//下拉框
JComboBox jComboBox = new JComboBox(boxModel);
//设置选中值
jComboBox.setSelectedIndex(0);
//设置是否可编辑,默认不可编辑
jComboBox.setEditable(true);
//jComboBox.setSelectedItem("Mango");
//添加到滚动条面板里
JScrollPane jScrollPane = new JScrollPane(jComboBox);
// 获取选中值,可用于在其他组件事件内获取选中的值
Object selectedItem = jComboBox.getSelectedItem();
//加到指定容器中
jFrame.add(jScrollPane);
26. JList - 列表
(1) 说明
JList为列表框可以显示一组数据项,从中可选择一个或多个数据。
(2) 示例
JPanel jPanel = new JPanel();
// 滚动列表数据
DefaultListModel listModel = new DefaultListModel();
listModel.addElement("Apple");
listModel.addElement("Grapes");
listModel.addElement("Mango");
//滚动列表
JList jList = new JList(listModel);
//设置列表的选择模式。SINGLE_SELECTION:单一的选择;SINGLE_INTERVAL_SELECTION:单段选择;MULTIPLE_INTERVAL_SELECTION:多段选择
jList.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
//默认选中项
jList.setSelectedIndex(1);
//显示出来的数据条数
jList.setVisibleRowCount(2);
//添加到滚动条面板里
JScrollPane jScrollPane = new JScrollPane(jList);
//选择事件
jList.addListSelectionListener(e -> {
if(!e.getValueIsAdjusting()){//判断是否是一系列多个事件中的一个,防止多次调用
//获取选中值集合,可用于在其他组件事件内获取选中的值
List list = jList.getSelectedValuesList();
System.out.println(list);
}
});
//加到指定容器中
jPanel.add(jScrollPane);
27. JProgressBar - 进度条
(1) 说明
JProgressBar进度条是一种以可视化形式显示某些任务进度的组件。
(2) 示例
//进度条,设置范围
JProgressBar progressBar = new JProgressBar(0, 100);
//设置当前值,可不断修改该值使进度条改变
progressBar.setValue(0);
//是否显示百分比,通过setString方法设置后失效
progressBar.setStringPainted(true);
//加到指定容器中
jFrame.add(progressBar);
28. JTable - 表格
(1) 说明
JTable 是用来显示和编辑常规二维单元表。
(2) 示例
//静态加载表格数据
//表头
Object[] booksColumn = { "图书名称", "图书作者", "图书价格" };
// 二维表格数据
Object[][] dataset = { { "java", "brucl", "85" }, { "javascript", "lunce", "54" } };
//创建表格
JTable jTable = new JTable(dataset, booksColumn);
//表格放到滚动条面板里
JScrollPane scrollPane = new JScrollPane(jTable);
//加到指定容器中
jFrame.add(scrollPane);
//动态加载表格数据
// 表头(列名)
Vector<String> columnNames = new Vector<String>();
columnNames.add("编号");
columnNames.add("姓名");
columnNames.add("性别");
columnNames.add("创建时间");
// 创建表格模型
DefaultTableModel dataModel = new DefaultTableModel(columnNames, 0);
// 创建JTable表格组件
JTable jTable = new JTable(dataModel);
//表格放到滚动条面板里
JScrollPane scrollPane = new JScrollPane(jTable);
//滚动条面板放到窗口中
jFrame.add(scrollPane, BorderLayout.CENTER);
//加载数据按钮,可动态加载数据
JButton jButton = new JButton("加载数据");
jButton.addActionListener(e -> {
Vector<Vector<Object>> rowData = new Vector<Vector<Object>>();
for (int i = 1; i <= 20; i++) {
Vector<Object> rowItem = new Vector<Object>();
rowItem.add(i);
rowItem.add("用户" + i);
rowItem.add(i % 2 == 1 ? "男" : "女");
rowItem.add(new java.util.Date());
rowData.add(rowItem);
}
// 绑定结果
dataModel.setDataVector(rowData, columnNames);
});
jFrame.add(jButton, BorderLayout.WEST);
29. JTree - 树
(1) 说明
JTree 组件被用来以树的形式显示数据,一层套一层,看起来清晰明了,使用户很方便地就了解到各个节点之间的层次关系,可以很容易地找到相关的数据。
(2) 示例
JPanel jPanel = new JPanel();
//构造树结点数据节点
DefaultMutableTreeNode root = new DefaultMutableTreeNode("中国");
DefaultMutableTreeNode r1 = new DefaultMutableTreeNode("安徽");
DefaultMutableTreeNode r2 = new DefaultMutableTreeNode("江苏");
DefaultMutableTreeNode o1 = new DefaultMutableTreeNode("合肥");
DefaultMutableTreeNode o2 = new DefaultMutableTreeNode("芜湖");
DefaultMutableTreeNode o4 = new DefaultMutableTreeNode("南京");
DefaultMutableTreeNode o5 = new DefaultMutableTreeNode("苏州");
root.add(r1);
root.add(r2);
r1.add(o1);
r1.add(o2);
r2.add(o4);
r2.add(o5);
JTree jTree = new JTree(root);
jTree.setEditable(true);//是否双击可编辑节点
jTree.putClientProperty( "JTree.lineStyle", "Angled");//设置结点连接线样式,None没有连接线,Horizontal水平分割线,Angled直角线连接
jTree.setShowsRootHandles(false);//根根结点是否有"展开、折叠"图标
jTree.setRootVisible(true);//是否显示根结点
jPanel.add(jTree);
JButton jButton=new JButton("点击");
jButton.addActionListener(e -> {
//1.得到当前选中 的结点
DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) jTree.getLastSelectedPathComponent();
// DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("新结点");
// selectedNode.add(newNode);//创建及添加新子结点
selectedNode.removeFromParent();//删除节点
// TreePath selectionPath = jTree.getSelectionPath();
// jTree.startEditingAtPath(selectionPath);//开始编辑选择节点,不能updateUI
// jTree.setSelectionPath(new TreePath(new Object[]{root,r1,o1}));//设置指定路径为选中
// jTree.setSelectionRows(TreePath[] paths);//设置多个指定路径为选中
jTree.updateUI();
});
jPanel.add(jButton);
30. JToolTip - 组件提示
(1) 说明
JToolTip是指当鼠标停留在一个控件上时显示的一个包含相关信息的方框,可通过重写组件createToolTip方法自定义提示框样式。
(2) 示例
//自定义ToolTip,需要重写组件createToolTip方法
JLabel jLabel=new JLabel("标签"){
@Override
public JToolTip createToolTip() {
JToolTip jToolTip = new JToolTip();
jToolTip.setForeground(Color.BLACK);//前景色
jToolTip.setBackground(Color.YELLOW);//后景色
jToolTip.setFont(new Font("黑体",Font.ITALIC,50));//字体
jToolTip.setBorder(BorderFactory.createLineBorder(Color.GREEN));//设置边框
jToolTip.setOpaque(false);//设置是否不透明,设置为fasle后背景色设置失效
jToolTip.setComponent(this);
return jToolTip;
}
};
jLabel.setToolTipText("提示");
31. JSlider - 滑杆
(1) 说明
JSlider 滑块是一个允许用户在有限区间内通过移动滑块来选择值的组件。
(2) 示例
//设置组件方向,最大最小值及初始值。
JSlider slider = new JSlider(JSlider.HORIZONTAL,0,100,0);
slider.setMajorTickSpacing(10);//主刻度
slider.setMinorTickSpacing(2);//次刻度
slider.setPaintLabels(true);//是否在滑块上绘制标签,默认false
slider.setPaintTicks(true);//是否在滑块上绘制刻度标记,默认false
slider.setPaintTrack(true);//是否在滑块上绘制滑道,默认true
slider.setInverted(false);//是否倒序,默认false
slider.addChangeListener(e -> {
System.out.println(((JSlider)e.getSource()).getValue());
});
//加到指定容器中
jFrame.add(slider);
32. JColorChooser - 颜色选择器
(1) 说明
JColorChooser颜色选择器用于颜色的选择、编辑等操作。主要为showDialog()和createDialog()方法的使用,前者只能选择颜色,后者能通过事件监听器实现颜色选择之后的应用。
(2) 示例
Color backgroundColor = JColorChooser.showDialog(jFrame,"请选择颜色", Color.white);
33. JFileChooser - 文件选择器
(1) 说明
JFileChooser是一个为用户提供选择文件的简单机制的组件。
(2) 示例
JPanel jPanel = new JPanel();
JButton jButton = new JButton("点击");
jButton.addActionListener(e -> {
//文件选择器
JFileChooser jFileChooser = new JFileChooser();
//设置文件的打开模式.FILES_ONLY(仅文件)、DIRECTORIES_ONLY(仅目录)、FILES_AND_DIRECTORIES(文件和目录)
jFileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
//打开文件选择器的当前显示目录
jFileChooser.setCurrentDirectory(new File("D:\\zp\\"));
//是否可以同时选取多个文件,默认值是false。
jFileChooser.setMultiSelectionEnabled(false);
//文件类型限制
jFileChooser.setFileFilter(new FileFilter() {
@Override
public boolean accept(File f) {
if (f.isDirectory())return true;
//返回true的文件或目录在文件选择器中显示
return f.getName().endsWith(".zip");
}
@Override
public String getDescription() {
//返回文件选择器 类型显示 字段
return ".zip";
}
});
//显示文件选择器弹框,返回0已选择文件,1为没选
int returnValue = jFileChooser.showDialog(jFrame, "选择文件");
System.out.println(returnValue);
if (returnValue == JFileChooser.APPROVE_OPTION) {
//选择的文件
File file = jFileChooser.getSelectedFile();
}
});
jPanel.add(jButton);
34. JOptionPane - 弹框
(1) 说明
JOptionPane可以非常方便地创建一些简单的对话框,含有消息对话框、确认对话框、输入对话框、自定义选项对话框。
(2) 示例
//消息提示框。ERROR_MESSAGE(错误)、INFORMATION_MESSAGE(信息)、WARNING_MESSAGE(警告)、QUESTION_MESSAGE(问题)、PLAIN_MESSAGE(无图标)
JOptionPane.showMessageDialog(jPanel,"错误提示框","错误提示框",JOptionPane.ERROR_MESSAGE);
//确认框,返回结果 是-0 否-1 取消-2 右上角关闭- -1
int i = JOptionPane.showConfirmDialog(jFrame, "是否操作");
//输入框,返回输入值
String s = JOptionPane.showInputDialog("请输入。。。");
//自定义配置的弹框,可设置消息、标题、操作类型、消息类型,自定义按钮,自定义图标等
int i = JOptionPane.showOptionDialog(jFrame, "消息", "标题", JOptionPane.CANCEL_OPTION, JOptionPane.ERROR_MESSAGE, new ImageIcon(), new Object[]{"是","否","不确定"}, "否");
//在指定组件内部显示消息提示框。ERROR_MESSAGE(错误)、INFORMATION_MESSAGE(信息)、WARNING_MESSAGE(警告)、QUESTION_MESSAGE(问题)、PLAIN_MESSAGE(无图标)
JOptionPane.showInternalMessageDialog(jPanel,"错误提示框","错误提示框",JOptionPane.ERROR_MESSAGE);
//在指定组件内部显示确认框,返回结果 是-0 否-1 取消-2 右上角关闭- -1
int i = JOptionPane.showInternalConfirmDialog(jFrame, "是否操作");
//在指定组件内部显示输入框,返回输入值
String s = JOptionPane.showInternalInputDialog("请输入。。。");
//在指定组件内部显示配置弹框,可设置消息、标题、操作类型、消息类型,自定义按钮,自定义图标等
int i = JOptionPane.showInternalOptionDialog(jFrame, "消息", "标题", JOptionPane.CANCEL_OPTION, JOptionPane.ERROR_MESSAGE, new ImageIcon(), new Object[]{"是","否","不确定"}, "否");
35. JSpinner - 微调选择器
(1) 说明
JSpinner允许用户从有序序列中选择数字或对象值。
(2) 示例
//数值微调控制配置,指定初始值、最小值、最大值、进步值。
SpinnerModel spinnerModel1 = new SpinnerNumberModel(1, 0, 100, 1);
//微调控制,数字选择
JSpinner spinner1 = new JSpinner(spinnerModel1);
//监听器
spinner1.addChangeListener(e -> {
System.out.println(((JSpinner)e.getSource()).getValue());
});
//加到指定容器中
jFrame.add(spinner1);
//日期微调控制配置,可指定默认显示日期,开始、结束日期 及 显示类型。
SpinnerDateModel spinnerModel2 = new SpinnerDateModel();
spinnerModel2.setValue(new Date());//设置当前日期
JSpinner spinner2 = new JSpinner(spinnerModel2);
//配置日期格式
JSpinner.DateEditor editor = new JSpinner.DateEditor(spinner2, "yyyy-MM-dd HH:mm:sss");
DateFormatter formatter = (DateFormatter)editor.getTextField().getFormatter();
formatter.setAllowsInvalid(false);//是否允许正在编辑的值在一段时间内无效
formatter.setOverwriteMode(false);//是否新字符将覆盖模型中的现有字符。
spinner2.setEditor(editor);
//加到指定容器中
jFrame.add(spinner2);
//数组或集合微调控制配置,指定集合或数组数据。
String[] data={"A","B","C"};
SpinnerListModel spinnerModel3 = new SpinnerListModel(data);
//微调控制,数字选择
JSpinner spinner3 = new JSpinner(spinnerModel3);
//加到指定容器中
jFrame.add(spinner3);
36. JScrollBar - 滚动条
(1) 说明
JScrollbar用于添加水平和垂直滚动条。它是滚动条的实现。
(2) 示例
JPanel jPanel = new JPanel();
//数值选择滚动条,可设置方向、初始值、延伸区,最大最小值。最大值-最小值-延伸区=滚动条刻度(长度)
JScrollBar jScrollBar = new JScrollBar(JScrollBar.HORIZONTAL,0,0,0,100);
jScrollBar.setValue(0);// 设置默认滚动轴位置。
jScrollBar.setPreferredSize(new Dimension(200,20));
jScrollBar.setUnitIncrement(1);// 设置拖曳滚动轴时,滚动轴刻度一次的变化量。
jScrollBar.setBlockIncrement(10);// 设置当鼠标在滚动轴列上按一下是,滚动轴一次所跳的区块大小
jScrollBar.setMinimum (1);//最小值
jScrollBar.setMaximum (100); //最大值
//监听器
jScrollBar.addAdjustmentListener(e->{
System.out.println(jScrollBar.getValue());
});
//加到指定容器中
jPanel.add(jScrollBar);