Java-JUI编程-Lesson3

发布时间 2023-11-19 21:24:09作者: 回忆也交给时间

一.JFrame

JFrame是javax.swing下的一个类,它也是一个窗体,它的大部分配置和Frame都是一样的,可以说JFrame继承了Frame类

JFrame类中又写了很多Frame没有的方法,属于是优化了Frame类

实例化一个JFrame对象:

//新建一个JFrame
JFrame jFrame = new JFrame("JFrame窗体");

给文本标记设置位置:

//新建一个文本标签
JLabel label = new JLabel("欢迎来到JUI");
//设置标签的水平位置,水平对齐
label.setHorizontalAlignment(SwingConstants.CENTER);

JFrame的窗口关闭事件:

//JFrame的自带关闭窗口事件
jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

实例化JFream容器,关于JFrame自己的设置都需要实例化这个容器Container

//JFrame窗体的实例容器,要想窗口自己的设置显示就需要实例这个容器
Container contentPane = jFrame.getConte
contentPane.setBackground(Color.cyan);

 设置容器为绝对布局,即根据空间设置的位置定位:

//设置绝对布局
contentPane.setLayout(null);

 

JDialog弹窗,需要继承JDialog类,弹窗的设置和Frame是一样的,可以理解新建了一个窗体:

class myDialog extends JDialog{
    public myDialog() {
        this.setVisible(true);
        this.setBounds(600,600,300,300);
        Container contentPane = this.getContentPane();
        contentPane.setLayout(null);
        JLabel jLabel1 = new JLabel("action:这是一个弹窗!");
        jLabel1.setHorizontalAlignment(SwingConstants.CENTER);
        contentPane.add(jLabel1);
    }
}

 

二.图标Icon

JFrame中图标一共有两种,一种是利用画笔画一个图标出来,另外一种是直接加载一张本地图标出来

图标可以放在按钮或者标签上

  • Icon图标需要实现Icon类,此类有三个方法分别是,paintIcon方法,用来画图标,getwidth获得图标的宽度,getheight获得图标的高度
public void paintIcon(Component c, Graphics g, int x, int y) {
        g.fillOval(x,y,width,height);
    }
public int getIconWidth() {
        return 0;
    }

 

public int getIconHeight() {
        return 0;
    }

 

这三个方法实现以后就可以画出图标,主要的还是实现paintIcon方法

然后在启动方法中将图标添加上去,我们使用标签来作为示例:

JLabel jLabel = new JLabel("label");
jLabel.setIcon(icon);

 

icon就是画出来的图标

  • 另外一种图标是将图片作为图标放在标签或按钮上,它不需要实现Icon类,只需要拿到图片,然后利用ImageIcon对象将此图片加载为图标

获得图片的位置:

//获得图片地址
URL url = IconDemo.class.getResource("bcsz.png");

 

加载成为图片图标:

//加载成为ImageIcon图标
ImageIcon imageIcon = new ImageIcon(url);

 

将图片图标放在标签上:

//将图片图标放在标签上
label.setIcon(imageIcon);

 

三.JScrollPane滚动面板

这是一个很特殊的面板,当给予的窗口装不下此面板中的内容时,面板会根据大小自生成一个滚动条,利用滚动条的可以展示不可见的内容

此面板也是JFrame类下的,所以需要继承JFrame类

如果想看到滚动条的效果,就一定需要窗口显示大小小于面板大小

示例:
设置一个较大的文本域:

//创建一个文本域
JTextArea textArea = new JTextArea(20,50);
//先写入一些内容
textArea.setText("This is textArea");

 

装入一个JScrollPane面板:

//创建一个JScrollPane面板,并将文本域装入,此面板会根据大小自生成滚动条
JScrollPane jScrollPane = new JScrollPane(textArea);

 

在容器中放入面板:

//在容器中放入面板
contentPane.add(jScrollPane);

 

四.单选框和复选框

单选框

在一组按钮中只能选择其中一个,常见的如性别选项:男,女,沃尔玛购物袋,只能选择其中一个,不可能存在一个人的性别即是男又是沃尔玛购物袋的

所以在JFrame中,单选框首先要入组,在组内唯一选择

新建单选框RadioButton:

//单选框
JRadioButton jRadioB1 = new JRadioButton("JRadioB1");
JRadioButton jRadioB2 = new JRadioButton("JRadioB2");
JRadioButton jRadioB3 = new JRadioButton("JRadioB3");

 

单选框入组:

//单选框入组,确保一组内只有一个单选框被选中
ButtonGroup group = new ButtonGroup();
group.add(jRadioB1);
group.add(jRadioB2);
group.add(jRadioB3);

 

装入面板和容器中:

//装入面板
JPanel jPanel1 = new JPanel();
jPanel1.setLayout(new GridLayout(3,1));
jPanel1.add(jRadioB1);
jPanel1.add(jRadioB2);
jPanel1.add(jRadioB3);
 //装入容器
 contentPane.add(jPanel1,BorderLayout.NORTH);

 

复选框

复选框即一个定义域内可以有多个选择,比如我们的爱好,可以是唱歌,也可以是跳舞,也可以是篮球,难道有人只能有一个爱好嘛

复选框没有入组的操作,它不需要限定一个组只能由一个选择的选项所以不需要入组

新建复选框:

//复选框
JCheckBox jcBox1 = new JCheckBox("JCBox1");
JCheckBox jcBox2 = new JCheckBox("JCBox2");

装入面板中:

//装入面板
JPanel jPanel2 = new JPanel();
jPanel2.add(jcBox1,BorderLayout.NORTH);
jPanel2.add(jcBox2,BorderLayout.SOUTH);
contentPane.add(jPanel2,BorderLayout.SOUTH);

 五.下拉框和列表框

下拉框和列表框展示的一般都是多个数据,如果数据比较少就不需要使用这两种按钮框了

下拉框会先隐藏一大部分数据,显示第一行,当你选择的时候在展示所有的数据,选择完了以后,就会收起来

  • 创建下拉框JComboBox:
//创建JComboBox
JComboBox box = new JComboBox();

 

往下来菜单中装填数据:

//装填数据,首行填null是个人习惯,也可以直接填数据
box.addItem(null);
box.addItem("神里凌中");
box.addItem("神里凌华");
box.addItem("神里凌人");
box.addItem("神里凌民");

 

列表就是一下全部展示所有的数据,然后选择

  • 创建列表JList:
//在字符串数组中预存数据
String[] num={"芙宁纳","拉维莱特","莱欧私利"};
//创建列表,需要传入数据,可以是字符串数字或链表,或集合
JList jList = new JList(num);

 

添加到面板或窗体:

//装入面板或窗体
jPanel2.add(jList);

 

六.文本框,密码框,文本域

文本框一般装的就是单独的一行文本数据

文本框的创建:

//文本框
JTextField t1 = new JTextField("i am gold");
//规定文本框长度
JTextField t2 = new JTextField("yep,you are right",20);

 

密码框也是文本框,但是它比较特殊,默认输入的数据会被小圆点替换,也可以自定义被替换的字符:

//密码框
JPasswordField password = new JPasswordField();
//替换输入的数据显示为*
password.setEchoChar('*');

 

文本域就是多行文本框,可以支持大量的文本输入

文本域的创建:

//文本域,并设置大小为20行10列
JTextArea area = new JTextArea(20,10);