精华内容
下载资源
问答
  • swing组件
    2021-11-24 21:15:29

    Swing

    **AWT **不是跨平台的,从外观到控制都依赖操作系统,是重型组件

    **Swing **组件是用纯 java 实现的轻型(Lightweight)组件

    ​ 没有本地代码

    ​ 不依赖本地操作系统的支持

    ​ 在不同的操作系统表现一致

    Swing 库是 AWT 库的扩展

    Swing 组件类关系和顶层容器

    Swing 组件类关系:

    • javax.swing 包提供数量众多的接口、类和组件

    • 所有的组件是从 JComponent 扩展出来的

    窗口(Window)

    • Container 的子类

    • 有标题栏和相关控制按纽

    • 有边框

    • 可以添加菜单栏

    • 可以独立存在

    • 运行可以被移动,改变大小

    • 是顶层容器,不能包含在其他容器中

    面板(Panel)

    • Container 子类

    • 没有标题,没有边框,不可添加菜单栏

    • 不能独立存在

    • 可以包含其他 panel

    框架 Frame

    • Window 子类

    • 是一种窗口

    • 用于 JAVA Application 应用程序的主窗口,带有最大化、最小化和关闭控制按纽

    对话框 Dialog

    • Window 子类

    • 也是一种窗口

    • 不能作为应用程序的主窗口,通常依附于一个框架

    • 没有最大化和最小化按纽

    • 有模式(Modal)窗口属性

    • 总在最前面

    标签 Label

    • 用于显示字符串

    文件行 TextField

    • 单行文本编辑框,用于输入一行文

    按纽 Button

    • 显示执行命令

    • 执行特定操作

    JPanel、JButton

    • JPanel 用来创建面板

    • JButton 用来创建按钮

    package com.swing.ljb;
    
    import java.awt.*;
    import javax.swing.*;
    
    public class Swing {
    	public static void main(String[] args) {
    		JFrame jf = new JFrame("第一个 Swing 窗口");//创建窗口
    		jf.setSize(230, 80);//大小
    		jf.setBackground(Color.WHITE);//背景颜色
    		jf.setLocation(300, 200);//窗体大小
    		Container pane = jf.getContentPane(); //创建面板
    		JPanel panel=new JPanel();
    		JButton send=new JButton("发送");//创建按钮
    		JButton quit=new JButton("退出");
    		//把 button 放置到 panel 上,把 panel 放置到 frame 上
    		panel.add(send);//添加按钮
    		panel.add(quit);
    		pane.add(panel);
    		jf.setVisible(true);
    	}
    }
    
    

    常用的布局

    一个图形用户界面上会有很多个组件,这些组件需要根据用户使用需求和习惯进行布局,API 中提供了几种常用的布局管理器来进行布局;

    流布局管理器 FlowLayout

    ​ 组件按照从左到右,从上到下的方式依次布局;是 JPanel 的默认布局管理器;

    边界布局管理器 BorderLayout

    ​ 将容器分为东西南北中五个区域,可以在指定区域放置组件;是 JFrame 的默认布局管理;

    网格布局管理器 GridLayout,

    ​ 将容器分成等行等列的网格;

    package com.swing.ljb;
    
    import java.awt.*;
    import javax.swing.*;
    
    public class Swing {
    	public static void main(String[] args) {
    		// 创建 JFrame 对象
    		JFrame frame = new JFrame("TestJFrame");
    		// 获得内容面板容器
    		Container pane = frame.getContentPane();
    		// 创建 JPanel 对象
    		JPanel panel = new JPanel();
    		// 创建 JButton 对象
    		JButton send = new JButton("发送");
    		JButton quit = new JButton("退出");
    		// 把 button 放置到 panel 上,把 panel 放置到 frame 上
    		// 对 panel 设置流布局管理器
    		panel.setLayout(new FlowLayout());
    		// 把 button 放置到 panel 上,把 panel 放置到 frame 上
    		panel.add(send);
    		panel.add(quit);
    		// 对 frame 设置布局管理
    		frame.setLayout(new BorderLayout());
    		JLabel label = new JLabel("聊天内容:");
    		JTextField input = new JTextField();// 输入框
    		JTextArea output = new JTextArea();// 文本域
    		pane.add(label, "North"); // 北边 ->上边
    		pane.add(input, "South"); // 南边 ->下边
    		pane.add(output, "Center");// 中间
    		pane.add(panel, "East");// 包含了 2 个按钮,东-> 右边
    		// 设置大小及可见性
    		frame.setSize(300, 200);
    		frame.setVisible(true);
    	}
    }
    
    

    GUI 事件与监听器

    对于一个 GUI 来说,如果不进行事件处理,就是“又聋又哑”的,无法与用户进行交互;

    Java Swing 中事件相关的类和接口都位于 java.awt.event 以及 javax.swing.event 中;

    主要包括 XXXEvent 事件类,以及与事件类对应的监听器接口 XXXListener;

    对 GUI 进行事件处理的基本步骤:

    判断事件源组件以及事件类型

    编写事件监听器类,实现相应的监听器接口

    使用 addXXXListener 方法,对事件源组件进行事件监听注册

    更多相关内容
  • 主要介绍了Java实现Swing组件定制Button,涉及java Swing组件Button相关属性设置与使用操作技巧,需要的朋友可以参考下
  • 主要介绍了基于Java swing组件实现简易计算器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 浏览器 JBrowser 是易于使用的 Web 浏览器 - Swing 组件,基于 Mozilla Embedded API 和 Mozswing 分支 2.x。 JBrowser 在 windows、linux、maс os 和 solaris 上支持**仅 x86 架构**。 入门:
  • Swing 组件大全

    2021-02-21 18:30:27
    基本上 包括了swing所有的组件,数据库的操作,而且还引用了 jxl以及TableLayou 基本上 包括了swing所有的组件,数据库的操作,而且还引用了 jxl以及TableLayou
  • 浅析Java swing组件窗体设计.pdf
  • 在线销售管理系统
  • 这是 JCONTROL 的遗留副本 有关 MATLAB 的最新副本和更多 GUI 工具(拆分窗格、滚动窗格、选项卡式窗格、手风琴等),请参阅 Project Waterloo http://sigtool.sourceforge.net/
  • SwingSet是一个开源Java工具包,其中包含许多标准Java Swing组件的数据感知替代品。
  • 主要介绍了Java编程swing组件JLabel详解以及使用示例,具有一定借鉴价值,需要的朋友可以参考下
  • java中常见Swing组件

    千次阅读 2022-01-15 18:51:15
    Swing组件按功能分为以下几类: 1、顶层容器:JFrame,JApplet,JDialog 2、中间容器:JPanel,(滚动面板)JScrollPane, (分割面板)JSplitPane,(工具栏)JToolBar 3、特殊容器:(分层面板)JLayeredPane,...

    Swing组件按功能分为以下几类:
    1、顶层容器:JFrame,JApplet,JDialog
    2、中间容器:JPanel,(滚动面板)JScrollPane,
    (分割面板)JSplitPane,(工具栏)JToolBar
    3、特殊容器:(分层面板)JLayeredPane,(根面板)JRootPane,(内部窗口)JInternalPane,(菜单栏)JMenuBar
    (特殊容器也属于中间容器,即在用户具有特殊作用的中间容器)
    4、基本组件:

    组件描述
    JLabel标签
    JButton按钮
    JTextArea文本区
    JTextField文本框
    JRadioButton单选按钮
    JCheckBox复选框
    JPasswordField密码框
    JComboBox下拉列表框
    JList列表
    JProgressBar进度条
    JTable表格
    JTree

    在组件中显示跟电脑同步的时间

    //构造方法
    public aaa(){
       JLable  lab = new JLabel();
       this.setTimer(lab);
    }
    
    
     private void setTimer(JLabel lab) {
       //设置Timer 1000ms实现一次动作 实际是一个线程
      final JLabel varTime = lab;
      Timer timeAction = new Timer(2000, e -> {
      long timemillis = System.currentTimeMillis();
      
      //转换日期显示格式
      SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      varTime.setText(df.format(new Date(timemillis)));
      });
      timeAction.start();
    }
    
    

    一.窗口JFrame

    JFrame frame=new JFrame("窗口标题");         //构造方法,创建窗体对象
    frame.setTitle("窗口标题");                  //可在创建对象中写标题,亦可以调用这个方法
    frame.setVisible(true);                     //设置窗口可见
    frame.setBounds(200,200,200,30);    //设置窗口的位置(x坐标,y坐标)和窗体大小(长,宽)
    frame.pack();            //自动适配组件的大小
    frame.getContentPane(panel);   //将面板panel(中间容器)设置为窗体内容面板
    frame.setLayout(null);     //采用绝对布局,通过坐标指定组件的位置,注意程序顺序
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  //点击×退出窗口
    

    (1)只设置窗体的大小,调用方法setSize()
    (2)只设置窗体的位置,调用方法setLocation()
    (3)亦可以调用方法setLocationRelativeTo(null),无论窗口多大,窗体都会出现在屏幕的中心

    frame.setSize(200,200);      //设置坐标x和y
    frame.setLocation(200,200);   //设置长和宽
    frame.setBounds(200,200,200,200);     //设置窗体的位置和大小
    frame.setLocationRelativeTo(null);
    

    (4)获取内容面板

    Container ct = frame.getContentPane();  //获取内容面板容器
    ct.add();     //将组件加入内容面板中
    
    
    frame.getContentPane().add(panel);
    

    二、面板JPanel

    一个窗体可以设置多个面板

    JPanel panel = new JPanel();         //构造方法
    panel.setBackground(Color.white);    //设置面板颜色
    panel.setLayout(null);              //设置布局管理器
    panel.setBounds(45,20,300,120);     //设置面板的位置和大小
    

    (1)可以自定义颜色,快捷键win+R,输入mspaint,点击编辑颜色,红黄绿后面的数字及是Color(R,G,U)中的三个数字,其他组件亦可以调用这个方法来自定义颜色

    panel.setOpaque(true);
    panel.setBackground(new Color(170,224,238));   //自定义颜色
    

    在这里插入图片描述
    三、标签JLabel

    图片是标签的组件

    JLabel lab = new JLabel("标签中字体");
    
    //将图片添加到标签中,"src/2.jpg"是图片的地址
    Icon pic1 = new ImageIcon("src/2.jpg");
    lab.setIcon(pic1);      
    
    lab.setBounds(35, 35, 45, 45);   //设置标签的大小
    lab.setOpaque(true);         //必须设置不透明,否则将不显示颜色
    lab.setForeground(Color.ORANGE);   //设置标签中字体颜色
    lab.setBackground(new Color(170,224,238));   //设置标签背景颜色
    

    (1)设置字体

    其他组件中的字体亦可以调用setFont()方法设置字体

     Font font = new Font("宋体",Font.BOLD,13);
     lab.setFont(font);
    

    四、按钮JButton

    JButton bt=new JButton("按钮中字体");
    bt.setBorderPainted(false);          //去掉按钮边界
    bt.setForeground(Color.black);       //设置按钮中字体颜色
    bt.setFont(font);                    //设置按钮中字体
    bt.setOpaque(true);            //必须设置不透明,否则将不显示颜色        
    bt.setBackground(new Color(255,236,242));     //设置按钮背景颜色
    bt.setBounds(270,635,130,30);                //设置按钮的位置和大小
    

    一般点击按钮要跳转到下一个页面或者是跳出弹窗,所以会对其进行监听器注册,简单介绍一下

     bt.addMouseListener(new MouseAdapter() {   //注册监听器
     @Override
     public void mouseClicked(MouseEvent e) {
        super.mouseClicked(e);
        frame.setVisible(false);       //此页面消失
        sb=new Subscribe();        //创建下一个页面的对象,Subscribe是下一个页面的类名
        sb.setVisible(true);       //显示下一个页面
       }
     });
    

    五、文本区JTextArea

    文本框与文本区差不多,只是文本框只能输入一行信息

    JTextArea text = new JTextArea("文本区中文字");
    text.setLineWrap(true);              //使文本区中的文字自动换行
    text.setWrapStyleWord(true);
    text.setEditable(false);          //设置不可编辑
    text.setFont(font);
    text.setBounds(35,90, 230, 80);
    

    六、表格JTable

    DefaultTableModel model = new DefaultTableModel();
    model.addColumn("周六", new Vector<Integer>());
    model.addColumn("周日", new Vector<Integer>());
    model.addColumn("周一",new Vector<String>());
    model.addColumn("周二",new Vector<String>());
    model.addColumn("周三",new Vector<String>());
    model.addColumn("周四", new Vector<String>());
    model.addColumn("周五",new Vector<String>());
    JTable table = new JTable(model);
    //将表格放在滚动面板中
    JScrollPane jp = new JScrollPane(table);
    jp.setBounds(35, 190, 330, 73);
    //设置水平和垂直滚动条
    jp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
    jp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
     //设置留有空白的表格行数,即30,调用方法addRow,添加列数调用方法addColumn()  for(int k = 0;k < 30 ;k ++) {
          model.addRow(new Vector<Integer>());}   
    

    七、下拉列表框JComboBox

    Dimension dimension = new Dimension(220,30);
    JComboBox<String> j = new JComboBox<>();
    j.setSize(dimension);
    j.addItem("按照姓名查询");
    j.addItem("按照身份证号查询查询");
    j.setBounds(70, 100,220, 30);
    j.setBackground(Color.pink );
    

    Dimension 是Java的一个类,封装了一个构件的高度和宽度,高度值和宽度值是整数,表明有多少个像素点

    八、单选按钮JRadioButton

    一组单选按钮只能有一个处于选中状态,JRadioButton通常位于一个ButtonGroup按钮组中

    (1)JRadioButton rb=new JRadioButton(String text,boolean selected);
    创建一个指定文本和选择状态的复选框

    JRadioButton rb1=new JRadioButton("边牧"); 
    JRadioButton rb2=new JRadioButton("金毛"); 
    JRadioButton rb3=new JRadioButton("萨摩耶"); 
    JRadioButton rb4=new JRadioButton("阿拉斯加犬"); 
    ButtonGroup group=new ButtonGroup();
    
    //添加JRadioButton到ButtonGroup中
    group.add(rb1);
    group.add(rb2);
    group.add(rb3);
    group.add(rb4);
    
    panel.add(rb1);
    panel.add(rb2);
    panel.add(rb3);
    panel.add(rb4);
    

    九、复选框JCheckBox

    JCheckBox jcb1 = new JCheckBox("边牧");
    JCheckBox jcb2 = new JCheckBox("萨摩耶"); 
    JCheckBox jcb3 = new JCheckBox("阿拉斯加犬");
    JCheckBox jcb4 = new JCheckBox("柴犬");
    
    panel.add(jcb1);
    panel.add(jcb2);
    panel.add(jcb3);
    panel.add(jcb4);
    

    (1)JCheckBox jcb4 = new JCheckBox(String text,boolean selected);
    创建一个指定文本和选择状态的复选框

    展开全文
  • JAVA之Swing组件(常用)

    千次阅读 2022-03-24 16:20:53
    文本框(JTextFied) 文本区域(JTextArea)与滚动面板(JScrollPane) 下拉列表(JComboBox) 菜单(JMenu) 对话框(JDialog) 课堂小结 边框(Border) JComponent类有一个setBorder(Border border)方法,用来为组件设置边框。...

    write:2022-3-28

    边框(Border)

    JComponent类有一个setBorder(Border border)方法,用来为组件设置边框。
    所有的边框类都实现了javax.swing.border.Border接口。
    在这里插入图片描述
    各种border的形式:
    在这里插入图片描述
    eg:(在一个面板中创建多种Border)

    package Swing;
    
    import javax.swing.*;
    import javax.swing.border.*;
    import java.awt.*;
    
    public class BordersDemo extends JFrame {
        /** 按照参数指定的边框创建一个JPanel对象 */
        public static JPanel getPanelWithBorder(Border b){
            JPanel jp = new JPanel();
            jp.setLayout(new BorderLayout());
            String nm = b.getClass().toString();//获得边框对象b的完整的类名  eg:得到javax.swing.border.TitleBorder
            nm = nm.substring(nm.lastIndexOf('.')+1);//去掉前缀包名  eg:上述去掉包名得到TitleBorder
            //在JPanel中央有一个JLabel,它显示边框类的名字
            jp.add(new JLabel(nm,JLabel.CENTER),BorderLayout.CENTER);
            jp.setBorder(b);//设置JPanel的边框
            return jp;
        }
        //构造方法
        public BordersDemo(String title){
            super(title);
            setLayout(new GridLayout(2,4));
            add(getPanelWithBorder (new TitledBorder("Title")));//带标题的边框
            add(getPanelWithBorder (new EtchedBorder()));//嵌入式的边框
            add(getPanelWithBorder (new LineBorder(Color.BLUE)));//带有边界线的边框,边界线颜色为蓝色
            add(getPanelWithBorder(new MatteBorder(5,5,30,30,Color.PINK)));
            add(getPanelWithBorder (new BevelBorder(BevelBorder.RAISED)));//凸起来的边框
            add(getPanelWithBorder (new SoftBevelBorder(BevelBorder.LOWERED)));//凹下去的边框
            add(getPanelWithBorder(new CompoundBorder(new EtchedBorder(), new LineBorder(Color.BLUE))));
    
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            pack();
            setVisible(true);
        }
        public static void main(String[] args) {
            new BordersDemo("Hello");
        }
    }
    
    

    运行结果:
    在这里插入图片描述

    文本框(JTextFied)

    文本框用来显示或者输入文本;
    JTextField与一个javax.swing.text.PlainDocument关联,PlainDocument保存了JTextField的文档。
    当用户向文本框输入文本,AWT线程(JVM自动创建,作用:显示图形界面外观以及响应图形界面上的各种操作)会自动调用PlainDocument的insertString()方法,把用户输入的文本存放到PlainDocument中。

    eg:

    package Swing;
    
    import javax.swing.*;
    import javax.swing.event.DocumentEvent;
    import javax.swing.event.DocumentListener;
    import javax.swing.text.AttributeSet;
    import javax.swing.text.BadLocationException;
    import javax.swing.text.PlainDocument;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    public class TextFieldDemo extends JFrame {
        private JButton b1 = new JButton("输入文本"),b2 = new JButton("拷贝");
        //三个文本框
        private JTextField
        t1 = new JTextField(30),
        t2 = new JTextField(30),
        t3 = new JTextField(30);
        private String str = new String();//存放用户当前选择的文本
        private UpperCaseDocument ucd = new UpperCaseDocument();
    
        //构造方法
        public TextFieldDemo(String title){
            super(title);
            //为两个Button注册事件监听器
            b1.addActionListener(new ActionListenerB1());
            b2.addActionListener(new ActionListenerB2());
            t1.setDocument(ucd);//使t1文本框和UpperCaseDocument对象ucd关联
            ucd.addDocumentListener(new DocumentListenerT());//为UpperCaseDocument对象ucd注册文档监听器
            setLayout(new GridLayout(4,1));
            JPanel buttonPanel = new JPanel();
            buttonPanel.add(b1);
            buttonPanel.add(b2);
            add(buttonPanel);
            add(t1);
            add(t2);
            add(t3);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            pack();
            setVisible(true);
        }
    
        //主函数
        public static void main(String[] args) {
            new TextFieldDemo("Hello");
        }
    
    //两个按钮的监听事件
    class ActionListenerB1 implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            t1.setEditable(true);//按钮b1按钮,文本框t1是可编辑的
        }
    }
    class ActionListenerB2 implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            if (t1.getSelectedText()==null)//若选择文本的为空,则读取整个文本框的所有文本,否则只读取选择的
                str = t1.getText();
            else
                str = t1.getSelectedText();
    
            ucd.setUpperCase(false);
            t1.setText("Inserted by Button2:"+str);//重新设置文本框内容
            ucd.setUpperCase(true);
            t1.setEditable(false);//文本框t1不是可编辑的
        }
    }
    //UpperCaseDocument对象ucd的监听器
    class DocumentListenerT implements DocumentListener{
        @Override
        public void insertUpdate(DocumentEvent e) {//增加操作
            t2.setText(t1.getText());//显示与t1文本框一样得内容
            t3.setText("Text:"+t1.getText());
        }
        @Override
        public void removeUpdate(DocumentEvent e) {//删除操作
            t2.setText(t1.getText());
        }
        @Override
        public void changedUpdate(DocumentEvent e) {}//修改操作
    }
    }
    //关联
    class UpperCaseDocument extends PlainDocument{  //可与文本框关联
        private boolean upperCase = true;
        public void setUpperCase(boolean flag){
            upperCase = flag;
        }
        public void insertString(int offset, String str, AttributeSet attSet) throws BadLocationException{   //覆盖了plainDocument的insertString方法
            if (upperCase) str = str.toUpperCase();//把用户输入的文本改成大写
            super.insertString(offset, str, attSet);//调用父类的insertString方法
        }
    }
    
    

    运行结果
    在这里插入图片描述
    按下“输入文本”按钮:
    在这里插入图片描述
    选中后三个单词然后按下“拷贝”按钮:
    在这里插入图片描述

    文本区域(JTextArea)与滚动面板(JScrollPane)

    JTextField与JTextArea的区别:
    1)JTextField表示文本框,只能输入一行文本,而JTextArea表示文本区域,可以输入多行文本。
    2)当用户在文本框内输入回车,将触发ActionEvent事件。当用户在文本区域内输入回车,仅仅意味着换行输入文本,并不会触发ActionEvent事件。如果希望对文本区域内的文本进行保存或拷贝等操作,应该使用另外的按钮或菜单来触发ActionEvent事件。

    图形区别:
    在这里插入图片描述
    JScrollPane表示带滚动条的面板,默认情况下,只有当面板中的内容超过了面板的面积时,才会显示滚动条。
    在构造JScrollPane对象时,也可以在构造方法中指定在水平方向和垂直方向滚动条的显示方式。

    eg:

    package Swing;
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    public class TextAreaDemo extends JFrame {
        JTextArea area1 = new JTextArea(5,10);
        JTextArea area2 = new JTextArea(5,10);//创建5行10列的文本区域
    
        //在垂直方向总是显示滚动条,在水平方向只有当需要的时候才显示滚动条
        JScrollPane pane1 = new JScrollPane(area1,
                JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        //panel2按默认方式创建,在垂直和水平方向都只有当需要的时候才显示滚动条
        JScrollPane pane2 = new JScrollPane(area2);
        JButton copyButton = new JButton("copy");
        //构造方法
        public TextAreaDemo(String title){
            super(title);
            copyButton.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    area2.setText(area1.getSelectedText()); //把第一个文本区域中被选中的文本拷贝到第二个文本区域中
                }
            });
            setLayout(new FlowLayout());
            add(pane1);
            add(copyButton);
            add(pane2);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            pack();
            setVisible(true);
        }
    
        public static void main(String[] args) {
            new TextAreaDemo("Hello");
        }
    }
    
    

    运行结果:
    在这里插入图片描述
    输入文字后选中部分文字点击按钮:(回车只代表换行)
    在这里插入图片描述

    下拉列表(JComboBox)

    JComboBox表示下拉列表,可以提供多个选项,并且只允许用户选择一项。下拉列表的优点在于能节省空间,使界面更加紧凑。只有当用户点击下拉列表,才会显示列表中的所有选项。
    默认情况下,JComboBox是不可编辑的,可以调用setEditable(true)使它可以被编辑。

    eg:

    package Swing;
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.Arrays;
    import java.util.HashSet;
    import java.util.Set;
    
    public class ComboBoxDemo extends JFrame {
        //下拉列表的初始选项
        private Set<String> initCities = new HashSet<String>(Arrays.asList(new String[]{"北京","上海","南京","杭州","深圳"}));
        //可以下拉列表增添的新的的选项
        private Set<String> moreCities = new HashSet<String>(Arrays.asList(new String[]{"济南","沈阳","合肥","拉萨","重庆","兰州"}));
        private JTextField textField = new JTextField(20);
        private JComboBox<String> comboBox = new JComboBox<String>();
        private JButton button = new JButton("添加城市");
    
        //构造方法
        public ComboBoxDemo(String title){
            super(title);
            for (String city:initCities)
                comboBox.addItem(city);//使用循环遍历initCities集合中的每个元素,并加入下拉列表中
    
            //button注册事件监听器
            button.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    String city = (String)comboBox.getSelectedItem();
                    if (moreCities.contains(city)){//判断用户输入的城市是否在moreCities列表中
                        comboBox.addItem(city); //向下拉列表中加入新的城市
                        textField.setText("添加"+city+"成功");
                        moreCities.remove(city);
                    }else {
                        textField.setText("添加"+city+"失败。不在可选范围内。");
                    }
                }
            });
            //comboBox注册事件监听器(当用户在下拉列表中选中某一项触发)
            comboBox.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    textField.setText("index:"+comboBox.getSelectedIndex()+" "+comboBox.getSelectedItem());
                }
            });
    
            comboBox.setEditable(true); //使下拉列表可以被编辑
            textField.setEditable(false);
    
            setLayout(new FlowLayout());
            add(comboBox);
            add(button);
            add(textField);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            pack();
            setVisible(true);
        }
    
        public static void main(String[] args) {
            new ComboBoxDemo("Hello");
        }
    }
    
    

    运行结果
    在这里插入图片描述
    当在下拉列表中选中某一项时:
    在这里插入图片描述
    当在下拉列表中输入某个城市并点击“添加城市”按钮时:
    在这里插入图片描述

    菜单(JMenu)

    菜单的组织方式为:一个菜单条JMenuBar中可以包含多个菜单JMenu,一个菜单JMenu中可以包含多个菜单项JMenuItem。有一些支持菜单的组件,如JFrame、JDialog和JApplet有一个setMenuBar(JMenuBar bar)方法,可以用这个方法来设置菜单条。
    JMenuItem有两个子类:JRadioButtonMenuItem和JCheckBoxMenuItem,它们分别表示单选菜单项和复选菜单项。
    当用户选择了某个菜单项,就会触发一个ActionEvent事件,该事件由ActionListener负责处理。
    图解:
    在这里插入图片描述
    eg:

    package Swing;
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;
    
    public class MenuDemo extends JFrame {
        private final Color colorValues[]=
                { Color.BLACK, Color.BLUE,Color.RED, Color.GREEN };
        private JRadioButtonMenuItem colorItems[], fonts[];
        private JCheckBoxMenuItem styleItems[];
        private JLabel displayLabel;
        private ButtonGroup fontGroup, colorGroup;
        private int style;
    
        public MenuDemo(String title) {
            super(title);
            JMenu fileMenu = new JMenu("File");
            fileMenu.setMnemonic('F');  //设置快捷键
    
            JMenuItem aboutItem = new JMenuItem("About...");
            aboutItem.setMnemonic('A');  //设置快捷键
            fileMenu.add(aboutItem);
            aboutItem.addActionListener(new ActionListener() {
                @Override
                // 显示一个消息对话框
                        public void actionPerformed(ActionEvent event){
                            JOptionPane.showMessageDialog(MenuDemo.this,
                                    "本例子用于演示菜单的用法",
                                    "About", JOptionPane.PLAIN_MESSAGE);
                        }
                    });
            JMenuItem exitItem = new JMenuItem("Exit");
            exitItem.setMnemonic('x');
            fileMenu.add(exitItem);
            exitItem.addActionListener(
                    new ActionListener() {
                        public void actionPerformed(ActionEvent event){
                            System.exit(0);
                        }
                    });
    
            JMenuBar bar = new JMenuBar();
            setJMenuBar(bar);  //在JFrame中设置菜单条
            bar.add(fileMenu);
            JMenu formatMenu = new JMenu("Format");
            formatMenu.setMnemonic('r');
    
            String colors[]= { "Black", "Blue", "Red", "Green" };
            JMenu colorMenu = new JMenu("Color");
            colorMenu.setMnemonic('C');
    
            colorItems = new JRadioButtonMenuItem[colors.length ];
            colorGroup = new ButtonGroup();
            ItemHandler itemHandler = new ItemHandler();
    
            for(int count = 0; count < colors.length; count++) {
                colorItems[count]=
                        new JRadioButtonMenuItem(colors[count]);
                colorMenu.add(colorItems[count]);
                colorGroup.add(colorItems[count]);
                colorItems[count].addActionListener(itemHandler);
            }
    
            colorItems[0 ].setSelected(true);
            formatMenu.add(colorMenu);
            formatMenu.addSeparator();
            String fontNames[]= { "Serif", "Monospaced", "SansSerif" };
            JMenu fontMenu = new JMenu("Font");
            fontMenu.setMnemonic('n');
            fonts = new JRadioButtonMenuItem[fontNames.length ];
            fontGroup = new ButtonGroup();
    
            for (int count = 0; count < fonts.length; count++) {
                fonts[count ]= new JRadioButtonMenuItem(fontNames[count]);
                fontMenu.add(fonts[count]);
                fontGroup.add(fonts[count]);
                fonts[count].addActionListener(itemHandler);
            }
    
            fonts[0].setSelected(true);
            fontMenu.addSeparator(); //设置分割线
            String styleNames[]= { "Bold", "Italic" };
            styleItems = new JCheckBoxMenuItem[styleNames.length ];
            StyleHandler styleHandler = new StyleHandler();
            for (int count = 0; count < styleNames.length; count++) {
                styleItems[count]=new JCheckBoxMenuItem(styleNames[count]);
                fontMenu.add(styleItems[count]);
                styleItems[count].addItemListener(styleHandler);
            }
    
            formatMenu.add(fontMenu);
            bar.add(formatMenu);
    
            displayLabel = new JLabel("Hello World", SwingConstants.CENTER);
            displayLabel.setForeground(colorValues[0]);
            displayLabel.setFont(new Font("Serif", Font.PLAIN, 72));
    
            setBackground(Color.WHITE);
            add(displayLabel, BorderLayout.CENTER);
    
            setSize(500, 200);
            setVisible(true);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
    
        public static void main(String args[]){ new MenuDemo("Hello");  }
    
        /** 处理MenuItem的事件 */
        private class ItemHandler implements ActionListener {
            public void actionPerformed(ActionEvent event){
                // 处理颜色
                for(int count = 0; count < colorItems.length; count++)
                    if(colorItems[count].isSelected()) {
                        displayLabel.setForeground(colorValues[count]);
                        break;
                    }
    
                // 处理字体
                for(int count = 0; count < fonts.length; count++)
                    if(event.getSource() == fonts[count]) {
                        displayLabel.setFont(new Font(fonts[count].getText(), style, 72));
                        break;
                    }
    
                repaint();
            }
        }
    
        /** 处理复选菜单项的事件 */
        private class StyleHandler implements ItemListener {
            @Override
            public void itemStateChanged(ItemEvent e){
                style = 0;
    
                if(styleItems[0].isSelected())style += Font.BOLD;
                if(styleItems[1].isSelected()) style += Font.ITALIC;
                displayLabel.setFont(new Font(displayLabel.getFont().getName(),style,72));
    
                repaint();
            }
        }
    }
    

    运行结果:
    在这里插入图片描述

    对话框(JDialog)

    JDialog表示对话框。对话框是在现有窗口的基础上弹出的另一个窗口。
    对话框可用来处理个别细节问题,使得这些细节不与原先窗口的内容混在一起。JDialog的默认布局管理器为BorderLayout。
    在这里插入图片描述

    1. JDialog的默认布局管理器为BorderLayout,它具有以下形式的构造方法:
      public JDialog(Frame owner,String title,boolean modal)
      以上参数owner表示对话框所属的Frame,参数title表示对话框的标题,参数modal有两个可选值:
      参数modal为true:表示模式对话框,这是JDialog的默认值。如果对话框被显示,那么其他窗口都处于不活动状态,只有当用户关闭了对话框,才能操纵其他窗口。
      参数modal为false:表示非模式对话框。当对话框被显示,其他窗口照样处于活动状态。
    2. 当对话框被关闭时,通常不希望结束整个应用程序,因此只需调用JDialog的dispose()方法销毁对话框,从而释放对话框所占用的资源。

    eg:

    package Swing;
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    public class DialogDemo extends JFrame {
        private JButton button = new JButton("提交");
        private MyDialog dialog = new MyDialog(this);
        private JTextField textField = new JTextField(10);
    
        public DialogDemo(String title){
            super(title);
            textField.setEditable(false);
            button.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    dialog.setVisible(true);
                    textField.setText(dialog.getText());
                }
            });
            setLayout(new FlowLayout());
            add(textField);
            add(button);
            setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
            setSize(500,300);    setVisible( true );
        }
    
        public static void main( String args[] ){new DialogDemo("DialogDemo");  }
    
    }
    
    class MyDialog extends JDialog{
        private JLabel label = new JLabel("请输入姓名:");
        private JTextField textField = new JTextField(10);
        private JButton button = new JButton("OK");
    
        public MyDialog(JFrame parent){
            super(parent,"提示",true);
            setLayout(new FlowLayout());
            add(label);
            add(textField);
    
            button.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    dispose();// 销毁对话框(只是图形界面销毁,dialog对象仍然存在)
                }
            });
            add(button);
            pack();
        }
    
        public String getText(){return  textField.getText();}
    }
    

    运行结果:
    点击“提交”按钮:
    在这里插入图片描述
    输入:perth
    在这里插入图片描述
    点击“OK”:
    在这里插入图片描述

    课堂小结

    介绍了一些常见的Swing组件的用法,在使用Swing组件时,主要要掌握以下内容:
    (1)Swing组件的构造方法。多数Swing组件都有默认构造方法,此外还有带参数的构造方法,用来设置组件的显示方式或工作方式。比如在构造对话框JDialog实例时,可以指定是否为模式对话框。
    (2)各种Swing组件的使用场合,比较功能相近的Swing组件的区别。比如JTextField和JTextArea都支持输入和显示文本,前者只能处理单行文本,而后者能够处理多行文本。
    (3)各种Swing组件所能触发的事件以及相应的事件监听器。各种按钮(包括菜单项)都会触发ActionEvent事件。当用户在JTextField中输入回车,会触发ActionEvent事件,而在JTextArea中输入回车,不会触发任何ActionEvent事件。ActionEvent事件的监听器为ActionListener。

    展开全文
  • swing组件介绍(一)

    2019-03-30 01:07:47
    NULL 博文链接:https://eneve520.iteye.com/blog/1312035
  • JIDE Common Layer是一套很不错的Swing组件类库,它JIDE软件公司其他产品的基础,于2007年4月开源,在其开源之前是JIDE商业软件中的一部分。它包含将近10万行代码,超过30个的Swing组件和工具。 压缩包中含有对应的...
  • SWing组件说明及使用

    2021-10-27 15:38:03
    文章目录SWing简介层级结构类层次结构顶级容器面板组件菜单相关组件基本组件及其他组件布局管理器事件监听 SWing简介 Swing是一个用于开发Java应用程序用户界面的开发工具包。其采用纯 Java 实现,不再依赖于本地...

    SWing简介

    Swing是一个用于开发Java应用程序用户界面的开发工具包。其采用纯 Java 实现,不再依赖于本地平台的图形界面,可以在所有平台上保持相同的运行效果,对跨平台支持比较出色。除此之外,Swing 提供了比 AWT 更多的图形界面组件,因此可以开发出美观的图形界面程序。

    层级结构

    • 顶级容器
      • 中间容器
        • 基本组件
        • 其他组件

    类层次结构

    Swing的类层次结构图

    顶级容器

    窗口类组件,可以独立显示,其他组件可以添加其中,一个图形界面显示至少需要一个窗口

    组件描述
    JFrame顶级容器,允许把其他组件添加到它里面,把它们组织起来
    JApplet顶级容器,JApplet要镶嵌在网页里,依赖浏览器来执行
    JWindow顶级容器,JWindow类是一个容器,可以显示,但不具有标题栏或窗口管理按钮(多用于制作欢迎界面)
    JDialog顶级容器,一个弹框的窗体组件,多用于信息的提示,它是没有最大化和最小化的,只有一个关闭按钮

    面板组件

    也属于中间容器,可以添加基本组件,也可以嵌套中间容器,最终的中间容器(最顶级的中间容器(无嵌套))必须添加在顶级容器。

    #组件描述
    1JPanel轻量级容器,面板容器
    2JScrollPane一个滚动面板,只能添加一个组件 (但是我们可以添加一个面板JPanel,然后再把很多组件添加到JPanel上)
    3JSplitPane拆分窗格,就是被分为两部分的容器,左边为一个容器,右边为一个容器,可设置为 左右分布和上下分布,HORIZONTAL_SPLIT和VERTICAL_SPLIT。两边分别放置组件。
    4JTabbedPane选项卡面板,可以通过单击标题或者图标在选项卡之间进行切换
    5JLayeredPane层级面板,JLayeredPane为容器添加了深度,允许组件在需要时互相重叠
    6JDesktopPane用于创建多文档界面或虚拟桌面的容器
    7JInternalFrame内部窗口,其支持在 JFrame 窗口内部显示一个完整的子窗口,并提供了许多本机窗体功能的轻量级对象, 通常将 JInternalFrame 添加到 JDesktopPane 中,由其来维护和显示 JInternalFrame

    菜单相关组件

    创建菜单栏时一些常用、相关的组件。

    组件描述
    JMenuBar菜单栏
    JToolBar工具栏
    JMenu菜单
    JMenultem菜单项
    JPpupMenu弹出式菜单
    JCheckBoxMenultem可以被选定或取消选定的菜单项
    JRadioButtonMenultem一个单选按钮菜单项的实现。

    基本组件及其他组件

    一些实现可实现人机交互的组件,

    #组件描述
    1JLabel标签组件
    2JTextField单行文本框
    3JTextArea多行文本框
    4JPasswordField密码框
    5JButton按钮组件
    6JRadioButton单选按钮
    7JToggleButton开关按钮
    8JCheckBox复选框
    9JComboBox下拉列表组件
    10JFormattedTextField文本控件类,在创建控件的构造方法中可以指定格式器类型,使得这个文本框只接受该类型的数据
    11JTextPaneJTextPane是JEditorPane类的子类。JTextPane用于带有嵌入式图像和组件的样式化文档。可以编辑和显示html,可以用图形表示的属性标记的文本组件
    12JEditorPane文本编辑器窗口
    13JSpinner允许用户使用输入字段从有序序列中选择数字或对象值(类似下拉列表组件)
    14JList列表控件,展示一组项目,供用户选择 ,支持三种选取模式:单选取、单间隔选取和多间隔选取
    15JTable表格控件
    16JTree树组件,将分层数据显示为树状轮廓的组件
    17JProgressBar进度条, 以可视化形式显示某些任务进度的组件
    18JScrollBar滚动条
    19JSeparator实现分隔线,通常使用在菜单项之间的分隔线
    20JSlider滑块,以图形方式在有界区间内通过移动滑块来选择值的组件 21
    22JFileChooser文件选择器
    23JToolTip用于显示组件的“提示”。

    布局管理器

    定义组件或者面板在添加到上一级面板时的排列布局方式。

    #LayoutsDescription
    1Absolute layout绝对布局
    2FlowLayout流式布局,线性布局
    3BorderLayout边界布局(东南西北中)
    4GridLayout网格布局
    5GridBagLayout网格包布局,组件可拉伸,不需要组件的尺寸一致,允许组件扩展到多行多列
    6CardLayout卡片布局,帮助用户实现多个成员共享同一个显不空间,并且一次只显示一个容器组件的内容
    7BoxLayout盒布局
    8SpringLayout弹性布局,通过定义组件边缘之间的距离来对组件在容器之中组件的布局进行管理而工作的
    9FormLayout表单布局
    10GroupLayout分组布局,串行组 (sequential group):按顺序沿指定方向(水平/垂直)逐个放置元素。并行组 (parallel group):沿指定方向(水平/垂直)并行排列元素,能够以四种不同方式对齐其子元素

    事件监听

    #EventEventListener
    1MouseEvent (鼠标事件)MouseListener(鼠标监听器)
    2KeyEvent(键盘事件)KeyListener(键盘监听器)
    3ActionEvent(动作事件)ActionListener(动作监听器)
    展开全文
  • 主要介绍了Java Swing组件实现进度监视功能,结合完整实例形式详细分析了Java基于Swing组件实现进度条显示功能的具体操作技巧与相关注意事项,需要的朋友可以参考下
  • 主要介绍了Java Swing组件单选框JRadioButton用法,结合具体实例形式分析了Swing单选框JRadioButton的使用方法及相关操作注意事项,需要的朋友可以参考下
  • 1、使用Swing组件库,完成用户登录和注册对话框的设计,当用户单击“注册”按钮时,弹出一个对话框,完成用户的注册,要求如下:1)用户名输入框:TextField 2)密码输入框:TextField3)重输入密码框:TextField ...
  • 摆动端子 外观和行为类似于任何普通终端的摆动组件 请参阅示例DebugTerminal.java以了解如何实现它。 支持一些ANSI控制序列 大胆的 暗淡 带下划线的 倒置的前景和背景
  • 主要介绍了Java Swing组件定制RadioButton,结合实例形式分析了java swing组件RadioButton相关属性设置与操作技巧,需要的朋友可以参考下
  • 主要介绍了Java Swing组件定制CheckBox,涉及Java swing组件CheckBox相关属性与设置操作技巧,需要的朋友可以参考下
  • 主要介绍了Java Swing组件JFileChooser用法,结合实例形式分析了java Swing组件JFileChooser文件选择器的功能、使用方法及相关注意事项,需要的朋友可以参考下
  • 兰花Swing组件库 一些简单但有用的Swing组件。 包括: JocCheckedList-列出组件,该组件的每个项目都带有一个复选框,以指示其选中状态并具有重新定义的选中操作模式。 JocInputMask-允许控制JTextComponent的组件...
  • 主要介绍了Java Swing组件文件选择器JFileChooser简单用法,结合实例形式分析了Swing组件中的文件选择器JFileChooser的简单使用方法,需要的朋友可以参考下
  • 主要介绍了Java Swing组件编程之JTable表格用法,结合实例形式详细分析了Swing组件中JTable表格的常见定义与使用方法,需要的朋友可以参考下
  • Java Swing 组件全演示源代码-Java Swing components entire demo source code
  • 主要介绍了Java Swing组件BoxLayout布局用法,结合实例形式分析了Swing使用BoxLayout容器进行布局的相关方法与操作技巧,需要的朋友可以参考下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 61,810
精华内容 24,724
关键字:

swing组件

友情链接: yiweijunyun.zip