JPanel面板以及文本框和标签,下列列表,滚动条

2017-12-11 15:49:26

很多情况下,我们的一个软件需要不止一种的布局方式,这样的话我们就需要把窗体切分成若干个面板,在面板中我们定义我们所需要的布局方式,如边界布局,流布局或网格布局。这时就需要引入一个概念,JPanel
下面是一段简单代码

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

public class Test extends JFrame {

    JPanel jp1,jp2;
    JButton btn1,btn2,btn3,btn4,btn5;

    public static void main(String[] args)
    {
        Test test = new Test();
    }

    public Test()
    {
        jp1 = new JPanel(); //HPanel 默认是流布局
        jp2 = new JPanel();

        btn1 = new JButton("可乐");
        btn2 = new JButton("红茶");
        btn3 = new JButton("绿茶");
        btn4 = new JButton("啤酒");
        btn5 = new JButton("矿泉水");

        jp1.add(btn1);
        jp1.add(btn2);
        jp2.add(btn3);
        jp2.add(btn4);
        //添加组件时,先将panel上的组件添加完毕,再添加iframe上的组件
        this.add(jp1,BorderLayout.SOUTH);
        this.add(jp2,BorderLayout.NORTH);
        this.add(btn5); //边界布局被添加在中间的组件可以不写第二个参数

        this.setTitle("布局综合应用");
        this.setSize(380,220);
        this.setLocation(200,200);
        this.setResizable(false);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }

}

下面是一个简单的用户登陆界面的代码实现

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

public class Test extends JFrame {

    JPanel jp1,jp2,jp3;
    JButton bt1,bt2;
    JLabel bq1,bq2;
    JTextField wbk;
    JPasswordField mmk;

    public static void main(String[] args)
    {
        Test test = new Test();
    }

    public Test()
    {
        jp1 = new JPanel();
        jp2 = new JPanel();
        jp3 = new JPanel();

        bt1 = new JButton("登陆");
        bt2 = new JButton("取消");

        bq1 = new JLabel("用户名:");
        bq2 = new JLabel("密  码:");

        wbk = new JTextField(10);
        mmk = new JPasswordField(10);

        this.setLayout(new GridLayout(3,1)); //指定为网格布局

        jp1.add(bq1);
        jp1.add(wbk);

        jp2.add(bq2);
        jp2.add(mmk);

        jp3.add(bt1);
        jp3.add(bt2);

        this.add(jp1);
        this.add(jp2);
        this.add(jp3);

        this.setTitle("用户登陆");
        this.setSize(230,130);
        this.setLocation(300,280);
        this.setResizable(false);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);



    }

}

运行结果如图

接下来是单选和多选的布局简单代码

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

public class Test extends JFrame {

    JPanel mb1,mb2,mb3;
    JButton an1,an2;
    JLabel bq1,bq2;
    JCheckBox fxk1,fxk2,fxk3;
    JRadioButton dx1,dx2;

    ButtonGroup dxz; //把单选按钮放进一个组里,默认只能选择一个

    public static void main(String[] args)
    {
        Test test = new Test();
    }

    public Test()
    {
        mb1 = new JPanel();
        mb2 = new JPanel();
        mb3 = new JPanel();

        bq1 = new JLabel("特长");
        bq2 = new JLabel("性别");

        an1 = new JButton("注册");
        an2 = new JButton("取消");

        fxk1 = new JCheckBox("音乐");
        fxk2 = new JCheckBox("体育");
        fxk3 = new JCheckBox("文艺");

        dx1 = new JRadioButton("男");
        dx2 = new JRadioButton("女");

        dxz = new ButtonGroup();
        dxz.add(dx1);
        dxz.add(dx2); //添加进组,使其只能选中其中一个


        this.setLayout(new GridLayout(3,1)); //网格布局
        mb1.add(bq1);
        mb1.add(fxk1);
        mb1.add(fxk2);
        mb1.add(fxk3);

        mb2.add(bq2);
        mb2.add(dx1);
        mb2.add(dx2);

        mb3.add(an1);
        mb3.add(an2);

        this.add(mb1);
        this.add(mb2);
        this.add(mb3);

        this.setTitle("用户注册");
        this.setSize(240,150);
        this.setLocation(300,280);
        this.setResizable(false);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);

    }

}

运行结果如图

下面是一个下拉列表以及滚动的简单代码

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

public class Test extends JFrame {

    JPanel mb1,mb2;
    JLabel bq1,bq2;
    JComboBox xlk;
    JList lb;
    JScrollPane gd;

    public static void main(String[] args)
    {
        Test test = new Test();
    }

    public Test()
    {
        mb1 = new JPanel();
        mb2 = new JPanel();

        bq1 = new JLabel("地区");
        bq2 = new JLabel("学历");

        String[] dq = {"北京","上海","天津","安徽"};
        xlk = new JComboBox(dq);

        String[] xl = {"高中","大专","本科"};
        lb = new JList(xl);
        lb.setVisibleRowCount(2);
        gd = new JScrollPane(lb);

        this.setLayout(new GridLayout(2,1));
        mb1.add(bq1);
        mb1.add(xlk);

        mb2.add(bq2);
        mb2.add(gd);

        this.add(mb1);
        this.add(mb2);

        this.setTitle("用户调查");
        this.setSize(200,190);
        this.setLocation(300,280);
        this.setResizable(false);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }

}

执行结果如图