JAVA图形界面GUI

news2024/11/25 16:29:55

目录

 一、窗口、窗格、按钮、标签

设置一个窗口JFrame

设置一个窗格JPanel和按钮JButton

设置一个标签JLabel

标准写法

 二、监听器ActionListener

用内部类实现

用匿名内部类实现

用LAMADA表达式实现

 三、文本域、复选框、下拉列表

JTextField单行文本域

JCheckBox复选框

JComboBox下拉列表

 四、设置标签内格式

设置标签内文本格式、标签大小、背景色

小测试

 五、布局器

FlowLayout流式布局器

BoardLayout边界布局器


 一、窗口、窗格、按钮、标签

设置一个窗口JFrame

import javax.swing.*;

/**
 * @author Ethan Xu
 * @date 2023/6/13 19:01
 * Talk is cheap,show me code.
 */
//设置一个窗口
public class Mydemo1 {
    public static void main(String[] args){

        //JFrame指一个窗口,构造方法的参数为窗口标题
        JFrame frame=new JFrame("Swing Example");
        //或者frame.setTitle("Swing Example");也能设置标题

        //当关闭窗口时,退出整个程序
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


        //设置窗口的大小
        frame.setSize(400,300);//第一个参数是宽度,第二个参数是高

        //显示窗口
        frame.setVisible(true);
    }
}

 

设置一个窗格JPanel和按钮JButton

import javax.swing.*;

/**
 * @author Ethan Xu
 * @date 2023/6/13 19:21
 * Talk is cheap,show me code.
 */

//设置一个窗口,窗格和按钮
public class Mydemo2 {
    public static void main(String[] args){

        //JFrame指一个窗口,构造方法的参数为窗口标题
        JFrame frame=new JFrame("Swing Example");
        //或者frame.setTitle("Swing Example");也能设置标题

        //当关闭窗口时,退出整个程序
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //设置一个窗格
        JPanel panel=new JPanel();
        frame.setContentPane(panel);

        //设置一个按钮,把按钮加在窗格里
        JButton button=new JButton("测试");
        panel.add(button);

        //设置窗口的大小
        frame.setSize(400,300);//第一个参数是宽度,第二个参数是高

        //显示窗口
        frame.setVisible(true);
    }
}

设置一个标签JLabel

import javax.swing.*;

/**
 * @author Ethan Xu
 * @date 2023/6/13 19:21
 * Talk is cheap,show me code.
 */

//设置一个窗口,窗格,按钮,标签
public class mydemo3 {
    public static void main(String[] args){

        //JFrame指一个窗口,构造方法的参数为窗口标题
        JFrame frame=new JFrame("Swing Example");
        //或者frame.setTitle("Swing Example");也能设置标题

        //当关闭窗口时,退出整个程序
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //设置一个窗格
        JPanel panel=new JPanel();
        frame.setContentPane(panel);

        //设置一个按钮,把按钮加在窗格里
        JButton button=new JButton("测试");
        panel.add(button);

        //设置一个标签
        JLabel label=new JLabel("你好");
        panel.add(label);
        //panel.add(new JLabel("hello"));也可以这么写

        //设置窗口的大小
        frame.setSize(400,300);//第一个参数是宽度,第二个参数是高

        //显示窗口
        frame.setVisible(true);
    }
}

标准写法

定义一个MyFrame类继承JFrame,封装起来

import javax.swing.*;

/**
 * @author Ethan Xu
 * @date 2023/6/13 19:31
 * Talk is cheap,show me code.
 */

//把窗格,按钮,标签封装一下,简化
public class MyFrame1 extends JFrame {
    //封装在MyFrame类中

    public MyFrame1(String title){
        super(title);
        //设置一个窗格
        JPanel panel=new JPanel();
        this.setContentPane(panel);

        //设置一个按钮,把按钮加在窗格里
        JButton button=new JButton("测试");
        panel.add(button);

        //设置一个标签
        JLabel label=new JLabel("你好");
        panel.add(label);
        //panel.add(new JLabel("hello"));也可以这么写
    }
}

再定义一个Use_MyFrame类,使用MyFrame

import javax.swing.*;

/**
 * @author Ethan Xu
 * @date 2023/6/13 19:37
 * Talk is cheap,show me code.
 */

//使用封装后的MyFrame
public class Use_MyFrame1 {
    public static void main(String[] args){


        //MyFrame frame=new MyFrame("标题");
        //一般都写成向上转型
        JFrame frame=new MyFrame1("title");

        //当关闭窗格时,推出整个程序
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //设置窗格大小
        frame.setSize(400,300);

        //显示窗格
        frame.setVisible(true);
    }


}

 二、监听器ActionListener

用内部类实现

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author Ethan Xu
 * @date 2023/6/13 19:54
 * Talk is cheap,show me code.
 */

//监听器的三种写法
//1、内部类
//2、匿名内部类
//3、LAMADA表达式

//设置窗口,窗格,按钮,标签,监听器(用内部类写)
//封装起来
public class MyFrame2 extends JFrame {
    //封装在MyFrame类中

    //设置一个标签,用来存放当前时间
    //因为这个东西,要让内部类访问到它,所以把它作为外部类的属性,不放在构造方法中,如果放在构造方法中,则内部类访问不到
    JLabel timeLabel=new JLabel("00:00:00");



    public MyFrame2(String title){
        super(title);
        //设置一个窗格(容器)
        JPanel panel=new JPanel();
        this.setContentPane(panel);

        //设置一个按钮,把按钮加在窗格里
        JButton button=new JButton("测试");
        panel.add(button);


        //在窗格中添加timeLabel
        panel.add(timeLabel);


        //设置一个监听器
        // 点击按钮,就会执行actionPerformed方法
        //button.addActionListener();这东西是一个接口,不能直接实现,要弄一个内部类
        //内部类定义好了,现在要实例化一个对象
        //MyActionListener listener=new MyActionListener();
        //一般都向上转型
        ActionListener listener=new MyActionListener();
        button.addActionListener(listener);
        //也可以将这两句合并
        //button.addActionListener(new MyActionListener());



    }

    //定义了一个内部类实现了addActionListener接口
    private class MyActionListener implements ActionListener {

        public void actionPerformed(ActionEvent e){
            System.out.println("**按钮被点击了");
            //点击按钮之后,显示当前系统时间
            //取得当前时间
            SimpleDateFormat sdf=new SimpleDateFormat("HH:mm:ss");
            String timeStr=sdf.format(new Date());
            System.out.println(timeStr);

            timeLabel.setText(timeStr);
        }
    }
}
import javax.swing.*;

/**
 * @author Ethan Xu
 * @date 2023/6/13 20:05
 * Talk is cheap,show me code.
 */

//使用封装后的MyFrame2
public class Use_MyFrame2 {
    public static void main(String[] args){


        //MyFrame frame=new MyFrame("标题");
        //一般都写成向上转型
        JFrame frame=new MyFrame2("title");

        //当关闭窗格时,推出整个程序
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //设置窗格大小
        frame.setSize(400,300);

        //显示窗格
        frame.setVisible(true);
    }


}

用匿名内部类实现

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author Ethan Xu
 * @date 2023/6/13 20:38
 * Talk is cheap,show me code.
 */
//设置窗口,窗格,按钮,标签,监听器(用匿名内部类写)
//封装起来
public class MyFrame3 extends JFrame {
    //封装在MyFrame3类中

    //设置一个标签,用来存放当前时间
    //因为这个东西,要让内部类访问到它,所以把它作为外部类的属性,不放在构造方法中,如果放在构造方法中,则内部类访问不到
    JLabel timeLabel=new JLabel("00:00:00");



    public MyFrame3(String title){
        super(title);
        //设置一个窗格(容器)
        JPanel panel=new JPanel();
        this.setContentPane(panel);

        //设置一个按钮,把按钮加在窗格里
        JButton button=new JButton("测试");
        panel.add(button);


        //在窗格中添加timeLabel
        panel.add(timeLabel);


        //设置一个监听器
        // 点击按钮,就会执行actionPerformed方法
        //button.addActionListener();这东西是一个接口,不能直接实现,弄一个匿名内部类
        button.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e){
                System.out.println("**按钮被点击了");
                //点击按钮之后,显示当前系统时间
                showTime();

            }
        });

    }

    public void showTime(){
        //取得当前时间
        SimpleDateFormat sdf=new SimpleDateFormat("HH:mm:ss");
        String timeStr=sdf.format(new Date());
        System.out.println(timeStr);

        //显示时间
        timeLabel.setText(timeStr);
    }


}
import javax.swing.*;

/**
 * @author Ethan Xu
 * @date 2023/6/13 20:38
 * Talk is cheap,show me code.
 */
//使用封装后的MyFrame3
public class Use_MyFrame3 {
    public static void main(String[] args){


        //MyFrame frame=new MyFrame("标题");
        //一般都写成向上转型
        JFrame frame=new MyFrame3("title");

        //当关闭窗格时,推出整个程序
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //设置窗格大小
        frame.setSize(400,300);

        //显示窗格
        frame.setVisible(true);
    }


}

用LAMADA表达式实现

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author Ethan Xu
 * @date 2023/6/13 20:53
 * Talk is cheap,show me code.
 */
//设置窗口,窗格,按钮,标签,监听器(用Lamada表达式写)
//封装起来
public class MyFrame4 extends JFrame {
    //封装在MyFrame4类中

    //设置一个标签,用来存放当前时间
    //因为这个东西,要让内部类访问到它,所以把它作为外部类的属性,不放在构造方法中,如果放在构造方法中,则内部类访问不到
    JLabel timeLabel=new JLabel("00:00:00");



    public MyFrame4(String title){
        super(title);
        //设置一个窗格(容器)
        JPanel panel=new JPanel();
        this.setContentPane(panel);

        //设置一个按钮,把按钮加在窗格里
        JButton button=new JButton("测试");
        panel.add(button);


        //在窗格中添加timeLabel
        panel.add(timeLabel);


        //设置一个监听器
        // 点击按钮,就会执行actionPerformed方法
        //button.addActionListener();这东西是一个接口,不能直接实现,用lamada表达式实现
        button.addActionListener((e)->{

                System.out.println("**按钮被点击了");
                //点击按钮之后,显示当前系统时间
                showTime();

        });

    }

    public void showTime(){
        //取得当前时间
        SimpleDateFormat sdf=new SimpleDateFormat("HH:mm:ss");
        String timeStr=sdf.format(new Date());
        System.out.println(timeStr);

        //显示时间
        timeLabel.setText(timeStr);
    }


}
import javax.swing.*;

/**
 * @author Ethan Xu
 * @date 2023/6/13 20:53
 * Talk is cheap,show me code.
 */
//使用封装后的MyFrame4
public class Use_MyFrame4 {
    public static void main(String[] args){


        //MyFrame frame=new MyFrame("标题");
        //一般都写成向上转型
        JFrame frame=new MyFrame4("title");

        //当关闭窗格时,推出整个程序
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //设置窗格大小
        frame.setSize(400,300);

        //显示窗格
        frame.setVisible(true);
    }


}

 点击测试按钮之后,自动获取当前系统时间

 三、文本域、复选框、下拉列表

JTextField单行文本域

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

/**
 * @author Ethan Xu
 * @date 2023/6/14 18:30
 * Talk is cheap,show me code.
 */

//JTextField 单行文本域
public class MyFrame5 extends JFrame {

    //放在外面,写成属性,是为了让监听器内部类访问到
    //设置一个单行文本域,宽度为20个英文字母
    JTextField textField=new JTextField(20);

    public MyFrame5(String title){
        super(title);

        //设置一个窗格(容器)
        JPanel root=new JPanel();
        this.setContentPane(root);

//        //设置一个单行文本域,宽度为20个英文字母
//        JTextField textField=new JTextField(20);//被放在外面了
        root.add(textField);
        textField.setText("你好");//在文本域中赋一个初值


        //设置一个按钮,一个监听器,当鼠标点击ok按钮时,自动获取文字域里的内容
        JButton button=new JButton("OK");
        root.add(button);
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                test();
            }
        });


    }
    public void test(){
        String str=textField.getText();
        System.out.println(str);
    }

}
import javax.swing.*;

/**
 * @author Ethan Xu
 * @date 2023/6/14 18:37
 * Talk is cheap,show me code.
 */
public class Use_MyFrame5 {
    public static void main(String[] args){


        //MyFrame frame=new MyFrame("标题");
        //一般都写成向上转型
        JFrame frame=new MyFrame5("title");

        //当关闭窗格时,退出整个程序
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //设置窗格大小
        frame.setSize(400,300);

        //显示窗格
        frame.setVisible(true);
    }


}

JCheckBox复选框

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

/**
 * @author Ethan Xu
 * @date 2023/6/14 18:57
 * Talk is cheap,show me code.
 */

//JCheckBox复选框

public class MyFrame6 extends JFrame {

    //内部类访问不到,所以作为属性放在外面

    //设置一个复选框
    JCheckBox agreeField=new JCheckBox("同意用户协议");

    //设置一个下一步按钮
    JButton nextButton=new JButton("下一步");

    public MyFrame6(String title){
        super(title);

        JPanel root=new JPanel();
        this.setContentPane(root);

        //设置一个复选框
        //JCheckBox agreeField=new JCheckBox("同意用户协议");放外面了
        root.add(agreeField);
        //agreeField.setSelected(true);//给复选框设置一个初值,默认为勾选,如果参数是false,则默认为不勾选

        //设置一个下一步按钮
        //JButton nextButton=new JButton("下一步");放外面了
        root.add(nextButton);

        //界面初始化
        agreeField.setSelected(false);//将复选框设置为未勾选状态
        nextButton.setEnabled(false);//此时无法选择下一步按钮,被禁用了

        //给复选框添加事件处理
        agreeField.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                if(agreeField.isSelected()){//如果被勾选,则启用下一步按钮,反之则继续禁用下一步按钮
                    nextButton.setEnabled(true);
                }else{
                    nextButton.setEnabled(false);
                }
            }
        });

    }
}
import javax.swing.*;

/**
 * @author Ethan Xu
 * @date 2023/6/14 18:57
 * Talk is cheap,show me code.
 */
public class Use_MyFrame6 {
    public static void main(String[] args){


        //MyFrame frame=new MyFrame("标题");
        //一般都写成向上转型
        JFrame frame=new MyFrame6("title");

        //当关闭窗格时,退出整个程序
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //设置窗格大小
        frame.setSize(400,300);

        //显示窗格
        frame.setVisible(true);
    }


}

 未勾选时,下一步按钮呗禁用

 勾选之后,下一步按钮启用

JComboBox下拉列表

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

/**
 * @author Ethan Xu
 * @date 2023/6/14 19:18
 * Talk is cheap,show me code.
 */

//JComboBox下拉列表

public class MyFrame7 extends JFrame {
    //设置一个下拉列表
    JComboBox<String> colorField=new JComboBox<>();
    //添加一个测试按钮
    JButton testButton=new JButton("测试");

    public MyFrame7(String title){
        super(title);

        JPanel root=new JPanel();
        this.setContentPane(root);

        //设置一个下拉列表
        //JComboBox<String> colorField=new JComboBox<>();放外面了
        root.add(colorField);
        //在下拉列表中添加数据项
        colorField.addItem("红色");
        colorField.addItem("黄色");
        colorField.addItem("蓝色");

        colorField.setSelectedIndex(2);//默认最开始就选中第二项,蓝色


        //添加一个测试按钮
        //JButton testButton=new JButton("测试");放外面了
        root.add(testButton);
        testButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                test();
            }
        });

    }
    public void test(){
        int count=colorField.getItemCount();//获取数据项的个数
        String value=colorField.getItemAt(0);//获取第0项的值
        System.out.println(count+value);
    }

}
import javax.swing.*;

/**
 * @author Ethan Xu
 * @date 2023/6/14 19:26
 * Talk is cheap,show me code.
 */
public class Use_MyFrame7 {
    public static void main(String[] args){


        //MyFrame frame=new MyFrame("标题");
        //一般都写成向上转型
        JFrame frame=new MyFrame7("title");

        //当关闭窗格时,退出整个程序
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //设置窗格大小
        frame.setSize(400,300);

        //显示窗格
        frame.setVisible(true);
    }


}

 

 四、设置标签内格式

设置标签内文本格式、标签大小、背景色

//设置标签内文本的字体格式,颜色,对齐方式,以及标签的大小和背景色

public class MyFrame8 extends JFrame {

    public MyFrame8(String title){
        super(title);

        JPanel root=new JPanel();
        this.setContentPane(root);

        JLabel label=new JLabel();
        root.add(label);

        label.setText("你好");

        //设置标签文字内容的字体
        label.setFont(new Font("楷体",Font.PLAIN,14));//第一个参数是字体,第二个是是否改为粗体(Font.PLAIN不是粗体,Font.BOLD是粗体),第三个是字号

        //设置标签文字内容的颜色
        label.setForeground(new Color(255,0,0));//RGB三个值

        //设置标签的背景色
        label.setOpaque(true);//先打开这个,才能设置背景色,如果不打开,则默认是透明的
        label.setBackground(new Color(0,0,255));//这两句一起用,才能修改背景色

        //设置标签的大小
        label.setPreferredSize(new Dimension(80,30));//宽度和高度

        //标签内文字的对齐方式
        label.setHorizontalAlignment(SwingConstants.CENTER);//SwingConstants.LEFT是左对齐,SwingConstants.CENTER是居中,SwingConstants.RIGHT是右对齐

    }

}
import javax.swing.*;

/**
 * @author Ethan Xu
 * @date 2023/6/14 19:44
 * Talk is cheap,show me code.
 */
public class Use_MyFrame8 {
    public static void main(String[] args){


        //MyFrame frame=new MyFrame("标题");
        //一般都写成向上转型
        JFrame frame=new MyFrame8("title");

        //当关闭窗格时,退出整个程序
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //设置窗格大小
        frame.setSize(400,300);

        //显示窗格
        frame.setVisible(true);
    }


}

小测试

设置四个标签,分别为1,2,3,4,每个颜色都不同
import javax.swing.*;
import java.awt.*;

/**
 * @author Ethan Xu
 * @date 2023/6/14 20:04
 * Talk is cheap,show me code.
 */

//一个小测试,设置四个标签,分别为1,2,3,4,每个颜色都不同

public class MyFrame9 extends JFrame {

    public MyFrame9(String title){
        super(title);

        JPanel root=new JPanel();
        this.setContentPane(root);

//        JLabel a1=new JLabel("1");
//        a1.setOpaque(true);
//        a1.setBackground(Color.YELLOW);
//        a1.setPreferredSize(new Dimension(60,30));
//        a1.setHorizontalAlignment(SwingConstants.CENTER);
//
//        JLabel a2=new JLabel("2");
//        a2.setOpaque(true);
//        a2.setBackground(Color.GREEN);
//        a2.setPreferredSize(new Dimension(60,30));
//        a2.setHorizontalAlignment(SwingConstants.CENTER);
//
//        JLabel a3=new JLabel("3");
//        a3.setOpaque(true);
//        a3.setBackground(Color.LIGHT_GRAY);
//        a3.setPreferredSize(new Dimension(60,30));
//        a3.setHorizontalAlignment(SwingConstants.CENTER);
//
//        JLabel a4=new JLabel("4");
//        a4.setOpaque(true);
//        a4.setBackground(Color.CYAN);
//        a4.setPreferredSize(new Dimension(60,30));
//        a4.setHorizontalAlignment(SwingConstants.CENTER);
//
//        root.add(a1);
//        root.add(a2);
//        root.add(a3);
//        root.add(a4);
        //这种重复性太高,一看就没水平,换一种方式去写

        ColorLabel a1=new ColorLabel("1",Color.YELLOW);
        ColorLabel a2=new ColorLabel("2",Color.GREEN);
        ColorLabel a3=new ColorLabel("3",Color.LIGHT_GRAY);
        ColorLabel a4=new ColorLabel("4",Color.CYAN);

        root.add(a1);
        root.add(a2);
        root.add(a3);
        root.add(a4);


    }

    private static class ColorLabel extends JLabel{
        public ColorLabel(String text,Color bgColor){
            this.setText(text);

            this.setOpaque(true);
            this.setBackground(bgColor);
            this.setPreferredSize(new Dimension(60,30));
            this.setHorizontalAlignment(SwingConstants.CENTER);

        }
    }
}
import javax.swing.*;

/**
 * @author Ethan Xu
 * @date 2023/6/14 20:05
 * Talk is cheap,show me code.
 */
public class Use_MyFrame9 {
    public static void main(String[] args){


        //MyFrame frame=new MyFrame("标题");
        //一般都写成向上转型
        JFrame frame=new MyFrame9("title");

        //当关闭窗格时,退出整个程序
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //设置窗格大小
        frame.setSize(400,300);

        //显示窗格
        frame.setVisible(true);
    }


}

 五、布局器

FlowLayout流式布局器

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

/**
 * @author Ethan Xu
 * @date 2023/6/14 20:27
 * Talk is cheap,show me code.
 */
//布局器,默认是FlowLayout流式布局器
    //从左往右,依次往后排,如果排满了,则排在下一行

public class MyFrame10 extends JFrame {

    public MyFrame10(String title){
        super(title);

        JPanel root=new JPanel();
        this.setContentPane(root);

        //不写的话也是默认的流式布局器,写上也行
        LayoutManager layout=new FlowLayout();
        root.setLayout(layout);


        MyFrame10.ColorLabel a1=new MyFrame10.ColorLabel("1", Color.YELLOW);
        MyFrame10.ColorLabel a2=new MyFrame10.ColorLabel("2",Color.GREEN);
        MyFrame10.ColorLabel a3=new MyFrame10.ColorLabel("3",Color.LIGHT_GRAY);
        MyFrame10.ColorLabel a4=new MyFrame10.ColorLabel("4",Color.CYAN);

        root.add(a1);
        root.add(a2);
        root.add(a3);
        root.add(a4);

        a3.setPreferredSize(new Dimension(250,60));


    }

    private static class ColorLabel extends JLabel{
        public ColorLabel(String text,Color bgColor){
            this.setText(text);

            this.setOpaque(true);
            this.setBackground(bgColor);
            this.setPreferredSize(new Dimension(60,30));
            this.setHorizontalAlignment(SwingConstants.CENTER);

        }
    }
}
import javax.swing.*;

/**
 * @author Ethan Xu
 * @date 2023/6/14 20:27
 * Talk is cheap,show me code.
 */
public class Use_MyFrame10{
    public static void main(String[] args){


        //MyFrame frame=new MyFrame("标题");
        //一般都写成向上转型
        JFrame frame=new MyFrame10("title");

        //当关闭窗格时,退出整个程序
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //设置窗格大小
        frame.setSize(400,300);

        //显示窗格
        frame.setVisible(true);
    }


}

BoardLayout边界布局器

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

/**
 * @author Ethan Xu
 * @date 2023/6/14 20:38
 * Talk is cheap,show me code.
 */

//BoardLayout 边界布局器
    //将容器分为东,南,西,北,中,五个区域
public class MyFrame11 extends JFrame {

    public MyFrame11(String title){
        super(title);

        JPanel root=new JPanel();
        this.setContentPane(root);

        //设置成边界布局器
       root.setLayout(new BorderLayout());


        MyFrame11.ColorLabel a1=new MyFrame11.ColorLabel("1", Color.YELLOW);
        MyFrame11.ColorLabel a2=new MyFrame11.ColorLabel("2",Color.GREEN);
        MyFrame11.ColorLabel a3=new MyFrame11.ColorLabel("3",Color.LIGHT_GRAY);
        MyFrame11.ColorLabel a4=new MyFrame11.ColorLabel("4",Color.CYAN);
        MyFrame11.ColorLabel a5=new MyFrame11.ColorLabel("5",Color.RED);

        root.add(a1,BorderLayout.NORTH);//显示在北边,宽度不能变,但是高度可以变
        root.add(a2,BorderLayout.SOUTH);
        root.add(a3,BorderLayout.WEST);//高度不能调,但是可以调宽度
        root.add(a4,BorderLayout.EAST);
        root.add(a5,BorderLayout.CENTER);//中间这个区域不能调整,一定是占满整个中央

        //把a1调高点
        a1.setPreferredSize(new Dimension(0,100));//宽度怎么设都不会变

        //把a3调高点
        a3.setPreferredSize(new Dimension(100,0));//高度怎么设都不会变



    }

    private static class ColorLabel extends JLabel{
        public ColorLabel(String text,Color bgColor){
            this.setText(text);

            this.setOpaque(true);
            this.setBackground(bgColor);
            this.setPreferredSize(new Dimension(60,30));
            this.setHorizontalAlignment(SwingConstants.CENTER);

        }
    }
}
import javax.swing.*;

/**
 * @author Ethan Xu
 * @date 2023/6/14 20:39
 * Talk is cheap,show me code.
 */
public class Use_MyFrame11{
    public static void main(String[] args){


        //MyFrame frame=new MyFrame("标题");
        //一般都写成向上转型
        JFrame frame=new MyFrame11("title");

        //当关闭窗格时,退出整个程序
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //设置窗格大小
        frame.setSize(400,300);

        //显示窗格
        frame.setVisible(true);
    }


}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/651831.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智能算法终极大比拼,以CEC2017测试函数为例,十种智能算法直接打包带走,不含任何套路

包含人工蜂群(ABC)、灰狼(GWO)、差分进化(DE)、粒子群(PSO)、麻雀优化(SSA)、蜣螂优化(DBO)、白鲸优化(BWO)、遗传算法(GA)、粒子群算法(PSO)&#xff0c;基于反向动态学习的差分进化算法&#xff0c;共十种算法&#xff0c;直接一文全部搞定&#xff01; 其中基于反向动态学习…

Dalamud 插件开发白皮书 P1 - Getting started

文章目录 从哪里开始 How do I get started?Dalamud 插件例子Dalamud 底层探究XIVLauncher 启动器 在哪里寻找帮助 Where do I ask for help?如何热重载插件 How do I hot-reload my plugin?如何调试插件&#xff0c;甚至游戏&#xff1f;如何在编码过程中使用 How do I use…

国内几款强大的语言模型

写在前面 Hello大家好&#xff0c; 我是【麟-小白】&#xff0c;一位软件工程专业的学生&#xff0c;喜好计算机知识。希望大家能够一起学习进步呀&#xff01;本人是一名在读大学生&#xff0c;专业水平有限&#xff0c;如发现错误或不足之处&#xff0c;请多多指正&#xff0…

STC15WProteus仿真红绿灯直行左右转紧急模式STC15W4K32S4-0041

STC15WProteus仿真红绿灯直行左右转紧急模式STC15W4K32S4-0041 Proteus仿真小实验&#xff1a; STC15WProteus仿真红绿灯直行左右转紧急模式STC15W4K32S4-0041 功能&#xff1a; 硬件组成&#xff1a;STC15W4K32S4单片机 2位数码管5个LED灯&#xff08;红 黄 ←绿 ↑绿 →绿…

《网络基础之socket理解》

【一】socket是什么 从字面上的意思来理解&#xff0c;这玩意的中文含义叫插座&#xff0c;对你想的没错&#xff0c;就是你家用来插电器的插座&#xff0c;只不过你家的插座是用来导电的&#xff0c;而网络里面的socket是用来传导信息的。 【二】网络socket传送数据流程 我们…

基于阻尼绕组起动同步电动机matlab完整程序分享

主要包含输出转速,感应转矩,磁场变化,感应电压,感应电流等6个参数变化曲线图!! 完整程序如下: clc; clear; close all; warning off; addpath(genpath(pwd)); %電機參數設定 r_stat_in=15;%stator內圈半徑 r_stat_out=17;%stator外圈半徑 width_rot=2;%rotor細部寬度 leng…

【瑞萨RA_FSP】DAC —— 输出正弦波

文章目录 一、DAC简介二、DAC的结构框图1. 参考电压2. 触发源3. DAC数据寄存器4. 转换的过程5. 同步转换 三、生成正弦波数据表四、DAC程序设计1. 硬件设计2. 软件设计①文件结构②FSP配置③DAC初始化函数④设置DAC输出电压函数⑤DAC输出正弦波⑥ hal_entry入口函数 一、DAC简介…

多用户商城软件有哪些开发方式?-加速度jsudo

电商时代之下&#xff0c;企业商家纷纷开始了b2b2c商城系统的搭建&#xff0c;以此来抢占电商市场&#xff0c;但由于大多企业商家并没有专业化的开发团队&#xff0c;所以大多会选择将网站建设外包给专业的商城系统开发公司&#xff0c;但就目前而言&#xff0c;b2b2c商城系统…

改进YOLOv8 | 损失函数篇 | YOLOv8 更换损失函数之 SIoU / EIoU / WIoU / Focal_xIoU 最全汇总版

文章目录 更换方式CIoUDIoUEIoUGIoUSIoUWIoUFocal_CIoUFocal_DIoUFocal_EIoUFocal_GIoUFocal_SIoU提示更换方式 第一步:将ultralytics/yolo/utils/metrics.py文件中的bbox_iou替换为如下的代码:class

基于微信小程序的云音乐管理系统+第三稿+文档

博主介绍&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 项目名称 基于微信小程序的云音乐管理系统第三稿文档 视频演示 基于微信小程序的云音乐管理系统第三稿问题解答任务书开题报告查重报告安装视频讲解视频&#…

【计算机网络】第三章传输层-电子科技大学2023期末考试

第三章 传输层 传输层服务与协议 传输层为两个不同主机上的应用程序之间提供逻辑通信机制 传输层协议运行在端系统 发送方: 将应用程序报文分成数据段传递给网络层,接受方: 将数据段重新组装成报文传递到应用层 网络层为两个主机之间提供逻辑通信 主要提供两种协议TCP和U…

RTC

文章目录 前言驱动应用程序运行 前言 RTC&#xff08;Real Time Clock&#xff0c;实时时钟&#xff09;是个常用的外设&#xff0c;通过 RTC 我们可以知道日期和时间信息&#xff0c;因此在需要记录时间的场合就需要实时时钟。 可以使用专用的实时时钟芯片来完成此功能&#…

PostgreSQL如何创建临时表?

分类 PostgreSQL支持两种临时表&#xff1a; 会话级临时表&#xff1a;数据可以一直保存在整个会话的生命周期中事务级临时表&#xff1a;数据只存在于这个事务的生命周期中 在PostgreSQL中&#xff0c;不管是事务级的临时表还是会话级的临时表&#xff0c;当会话结束时都会…

家庭版Windows10/Windows11不支持远程桌面的解决办法

家庭版Windows10或11是不支持远程桌面的。我们可以在电脑的“设置”-> “远程桌面设置”中查看系统是否支持远程桌面&#xff1a;我们可以通过RDPWrap这个项目让家庭版也支持远程桌面。 百度网盘下载 首先在下面网址下载该项目&#xff0c;下载zip&#xff1a;https://gith…

【wifi使用指导】wifi模块怎么用?无线路由wifi模块SKW92A/SKW77网页配置说明

据悉&#xff0c;在全球范围内&#xff0c;WiFi承载了超过一半的数据流量&#xff0c;并且65%-90%的智能手机流量来自WiFi。无线覆盖的实现依赖于WiFi模块提供的WiFi信号&#xff0c;支持AP/Client&#xff0c;Bridge&#xff0c;Gateway&#xff0c;Router&#xff0c;3G/4G R…

U-Mail企业邮件服务器搭建方案

数字化办公的日渐推行&#xff0c;使企业对邮箱的依赖与日俱增&#xff0c;正式工作报告&#xff0c;部门之间的事物往来、通知等等都需要使用到企业邮箱。随着企业对数字化建设的不断深入&#xff0c;企业对企业邮箱的要求也越来越高&#xff0c;比如对第三方应用集成及协同办…

【C++】STL之string类(1)

个人主页&#xff1a;平行线也会相交&#x1f4aa; 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【C之路】&#x1f48c; 本专栏旨在记录C的学习路线&#xff0c;望对大家有所帮助&#x1f647;‍ 希望我们一起努力、成长&…

19项网络与数据安全新国标全文公开免费下载

根据2023年5月23日国家市场监督管理总局、国家标准化管理委员会发布的中华人民共和国国家标准公告&#xff08;2023年第2号&#xff09;&#xff0c;全国信息安全标准化技术委员会归口的19项网络安全国家标准正式发布。近日&#xff0c;标准全文正式公开&#xff0c;博主第一时…

【社区图书馆】疯狂 Java 讲义:但凡种种,不一而足

虽说酒香不怕巷子深&#xff0c;但是千里之外并不一定能闻到&#xff0c;有人看到这可能会感觉这不免有些杠的味道&#xff0c;其实我想表达的是好酒也需要宣传&#xff0c;比如今天我所要讲的这本书《疯狂Java讲义》。 这不是【赠书活动】&#xff0c;这不是赠书活动… …&…

ChatGPT辅助学Qt6.2——1.Qt安装及编写登录界面

本文旨在帮助读者理解如何使用ChatGPT来辅助安装和学习Qt 6.2。我们将从Qt 6.2的基本概念开始&#xff0c;然后深入了解其安装过程&#xff0c;并探讨如何使用ChatGPT作为一个强大的辅助工具。对于那些寻求在学习和使用Qt 6.2中找到有效支持的人来说&#xff0c;这篇文章将提供…