Java学习(十二) --------- Java Swing GUI 图形界面开发


一、Java Swing 简介

Java Swing 是 Java 为 图形界面应用开发提供的一组工具包,是Java基础类的一部分。 Swing 包含构建图形界面(GUI)的各种组件,如:窗口、标签、按钮、文本框等,这些构成图形界面的元素(组件),包含在 javax.swing.* 包下,类名通常是以J开头,如JFrame,JButton等。组件是Java Swing开发中最基本的部分,也是我们重点要学习的一部分。

二、Java Swing 组件

什么是组件? 组件就是组成图形界面的各种元素,如按钮、窗口、文本框等。在Java Swing 中我们如果按照类对组件进行划分,其结构层次如下。

在这里插入图片描述
如果按照功能进行划分,可分为顶层容器、中间容器和基本组件。

其中顶层容器包括

组件功能
JFrame窗口(绝大多数 Swing 图形界面程序使用 JFrame 作为顶层容器)
JDialog对话框

中间容器包括

组件功能
JPenel面板
JTabbedPane选项卡面板

特殊的中间容器

组件功能
JMenuBar菜单栏
JToolBar工具栏
JPopMenu弹出菜单

基本组件包括

组件功能
JLabel标签
JButton按钮
JCheckBox复选框
JRadioButton单选按钮
JTextField文本框
JList列表
JComboBox下拉列表框
JOptionPane警告框
JTextArea文本区域
JTable表格
JTree

1. 顶层容器的使用方法

顶层容器常用的包括JFrame、JDialog,这两个都是属于窗体,身为顶层容器,窗口是基本组件的载体,在Java Swing开发中我们经常可以用到。接下来来看看我们如何在代码中使用这两种容器。

使用JFrame窗体

import javax.swing.*;
public class JFrameDemo {
    public static void CreateJFrame() {
        JFrame jf = new JFrame("hh");//JFrame是 Java 中的一个类, 创建出来的窗口实际上是这个类的实际对象。
        jf.setVisible(true); //设置窗体可视
        jf.setSize(500, 300); //设置窗体大小, 前面是宽, 后面是高
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//设置窗体的关闭方式为Exit_ON_CLOSE----退出应用程序默认窗口关闭
    }
    public static void main(String[] args) {
        JFrameDemo.CreateJFrame(); //调用本类中的CreateJFrame方法
    }
}

使用JFrame的继承写法

import javax.swing.*;

public class JFrameDemo extends JFrame {
    public  void create() {
        this.setVisible(true);
        this.setSize(500, 350);
        this.setTitle("hh");
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

    }
    public static void main(String[] args) {
        JFrameDemo jd = new JFrameDemo();
        jd.create();
    }
}

public class JFrameDemo extends JFrame {
      public JFrameDemo {
         setTitle("hh");
         setSize(300, 400);
         setLocationRetiveTo(null);
         setVisible(true);
         setDefaultCloseOperation(WindowConstants.Exit_ON_CLOSE);
      }
      public static void main(String[] args) {
         JFrameDemo jf = new JFrameDemo();
      }
}//把相关设置写到构造函数中会更好

效果如图

在这里插入图片描述

setDefaultCloseOperation()方法用于设置窗口的关闭方式,常常传入
WindowConstants.EXIT_ON_CLOSE 退出应用程序默认窗口关闭
WindowConstants.DO_NOTHING_ON_CLOSE 什么也不做就将窗体关闭
WindowConstants.DISPOSE_ON_CLOSE 任何注册监听程序对象后会自动隐藏并释放窗体
WindowConstants.HIDE_ON_CLOSE 表示隐藏窗口的默认窗口关闭

JFrame常用方法:

void get/setTitle(): 获取/设置该容器的标题。
void get/setState(): 获取/设置该容器的最小化、最大化等状态。
void is/setVisible(): 获取/设置该容器的可视状态,换句话说,是否在屏幕上显示。
void get/setLocation(): 获取/设置该容器在屏幕上应当出现的位置。
void get/setsize(): 获取/设置该容器的大小。
void add(): 将组件添加到该容器中。

使用JDialog窗体

如果只是单纯使用的话,其调用方式JFrame窗体大致相同。JDialog常常用于从一个窗体中弹出另外一个窗体。

import javax.swing.*;
public class JDialogDemo {
       public static void main(String[] args) {
         JFrame jf = new JFrame("outter");
         jf.setVisible(true);
         jf.setSize(800, 600);
         JDialog jd = new JDialog();
         jd.setSize(200, 150);
         jd.setTitle("inner");
         jd.setVisible(true);
        }
}

在这里插入图片描述
JDialog中方法与JFrame中方法大致相同,有

构造方法:
JDialog(Frame owner, String title)

void add(Component comp)
void setSize(int width, int height)
void setVisible(boolean b)
void setTitle(String title)

2. 中间组件的使用方法

JPanel组件定义面板实际上是一种容器组件,用来容纳各种其他轻量级组件。

常用方法:

void add(Component):添加组件。
void add(Component,int):添加组件至索引指定位置。
void add(Component,Object):按照指定布局限制添加组件。
void add(Component,Object,int):按照指定布局管理器限制添加组件到指定位置。
void remove(Component):移除组件。
void remove(int):移除指定位置的组件。
void removeAll():移除所有组件。
void paintComponent(Graphics):绘制组件。
void repaint():重新绘制。
void setPreferredSize(Dimension):设置组件尺寸。

实例:

import javax.swing.*;
public class Demo {
     public static void main(String[] args) {
       JFrame jf = new JFrame("窗口");
       jf.setSize(250, 250);
       jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
       JPanel panel = new JPenel();
       JButton btn = new JButton("按钮");
       panel.add(btn); //将按钮添加到案板中
       jf.setContentPane(panel);//把面板容器 设置到窗口中
       jf.setVisible(true);
     }
}

在这里插入图片描述

JTabbedPane 选项卡面板。用于创建多个选项卡式窗格。 这些窗格可以放置其他组件,可以通过单击相应选项卡来切换窗格。
常用方法:

构造方法:
   JTabbedPane()
   JTabbedPane(int tabPlacement)
void add(Component comp)
void addTab(String title, Component component)//将选项卡/组件添加到TabbedPane 对象中
void setSize(int width, int height)
void setVisible(boolean b)

实例:

import javax.swing.*;
public class Demo {
    public static void main(String[] args) {
        JFrame jf = new JFrame("窗口");
        jf.setSize(250, 250);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        JTabbedPane tp = new JTabbedPane(JTabbedPane.TOP);
        JPanel panel1 = new JPanel();
        JPanel panel2 = new JPanel();
        tp.addTab("选项1", panel1);
        tp.addTab("选项2", panel2);;
        jf.add(tp);
        jf.setVisible(true);
    }
}

在这里插入图片描述

JMenu/JMenuBar/JMenuItem ------ 菜单组件。JMenu为一级菜单,用于在菜单栏上添加菜单。JMenuItem为二级菜单,用于在菜单上添加菜单项,JMenuBar为菜单

JMenuBar常用方法:

void get/setAccelerator():获取/设置用作快捷键的 Ctrl+键。
void get/setText():获取/设置菜单的文本。
void get/setIcon():获取/设置菜单使用的图片
int getMenu(int index)
int getMenuCount();

JMenu常用方法:

构造函数:
    JMenu()
    JMenu(String s)
Component add(Component c)
void addSeparator()

JMenuItem常用方法

构造方法:
    JMenuItem()
    JMenuItem(String s)
void setEnabled(boolean b)
void setMnemonic(int mnemonic)

实例:

import javax.swing.*;
public class Demo {
    public static void main(String[] args) {
        JFrame jf = new JFrame("窗口");
        jf.setSize(250, 250);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        jf.setLocationRelativeTo(null);

        JMenu jm = new JMenu("File");
        JMenuBar jmb = new JMenuBar();

        JMenuItem jmi1 = new JMenuItem("Open");
        JMenuItem jmi2 = new JMenuItem("Close");
        JMenuItem jmi3 = new JMenuItem("Save");

        JMenu jm1 = new JMenu("new");
        JMenuItem jmi4 = new JMenuItem("Directory");
        JMenuItem jmi5 = new JMenuItem("File");
        jm1.add(jmi4);
        jm1.add(jmi5);

        jm.add(jm1);
        jm.add(jmi1);
        jm.add(jmi2);
        jm.add(jmi3);

        jmb.add(jm);//菜单栏中添加内容

        jf.setJMenuBar(jmb);//加入菜单栏的方式不能用add
        jf.setVisible(true);
    }
}

在这里插入图片描述

3. 基本组件的使用方法

从以上的例子我们可以看出,组件的使用一般都是组件本身所在类实例化对象,然后通过调用窗体的add()方法,将组件添加到窗体中。

我们先来看一下一些基本组件和其功能:

JButton:按钮
JLabel:标签
JCheckBox:复选框
JRadioButton:单选按钮
JTextFiled:文本框
JList:列表
JComboBox:下拉列表框
JTextArea:文本区域

如何在窗体中进行使用:

import javax.swing.*;
public class Demo extends JFrame {
    private JButton jbtn;
    private JLabel jlab;
    private JComboBox jcom;
    private JTextArea jt;
    private JList jli;
    private JCheckBox jck;
    private JPanel jp;
    private JTextField jtxt;
    private JRadioButton jradio1;
    private JRadioButton jradio2;
    private ButtonGroup buttonGroup;
    public Demo() {
        setTitle("Demo");
        setSize(500, 500);
        setLocationRelativeTo(null);

        jtxt = new JTextField("我是:");
        jtxt.setText("hhh");

        jp = new JPanel();

        jbtn = new JButton("按钮");

        jlab = new JLabel("我 是 hhh ");

        jt = new JTextArea(5, 20);

        jck = new JCheckBox();

        jradio1 = new JRadioButton("1");
        jradio2 = new JRadioButton("2");
        buttonGroup = new ButtonGroup();
        buttonGroup.add(jradio1);
        buttonGroup.add(jradio2);
        jradio1.setSelected(true);

        String[] cities = {"Beijing", "Qingdao", "Shanghai"};
        jli = new JList(cities);
        jcom = new JComboBox(cities);
        jli.setSelectedIndex(0);

        jp.add(jbtn);
        jp.add(jlab);
        jp.add(jcom);
        jp.add(jt);
        jp.add(jck);
        jp.add(jli);
        add(jp);

        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public static void main(String[] args) {
        Demo d = new Demo();
    }
}

在这里插入图片描述


未完待续

  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在森林中麋了鹿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值