Day27图形界面的布局管理
作者:互联网
学习目标
图形界面的布局管理
(1):对话框
(2):面板
(3):布局
(4):单/多选按钮
(5):列表
学习内容
(1):对话框
package Demo01;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import static javax.swing.WindowConstants.EXIT_ON_CLOSE;
public class DialogDemo01 extends JDialog {
public DialogDemo01(JFrame jframe) {
super(jframe,false);
this.setBounds(100,100,500,500);
Container container = this.getContentPane();
container.setLayout(null);
// container.add(new Label("大数据五班"));
JButton button = new JButton("我是五班");
button.setBounds(30,30,200,50);
container.add(button);
}
public static void main(String[] args) {
JFrame j = new JFrame();
j.setVisible(true);
j.setBounds(100,100,700,500);
j.setDefaultCloseOperation(EXIT_ON_CLOSE);
Container container = j.getContentPane();
container.setLayout(null);
JButton button = new JButton("我要登录");
button.setBounds(30,30,200,50);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e){
DialogDemo01 s = new DialogDemo01(j);
s.setVisible(true);
System.out.println("我被点击了");
}
});
container.add(button);
}
}
结果为:
(2):面板
JPanel
面板组件,非顶层容器。
一个界面只可以有一个JFrame窗体组件,但是可以有多个JPanel面板组件,而JPanel上也可以使用FlowLayout,BorderLayout,GridLayout等各种布局管理器,这样可以组合使用,达到较为复杂的布局效果。
例如:
package Demo02;
import java.awt.Container;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
//面板作为容器不能单独存在,必须放到其他容器里面JFrame,JDialog
public class JPaneDemo extends JFrame {
public JPaneDemo() {
Container container = this .getContentPane();
container.setLayout((new GridLayout( 2,1,10,10)));
JPanel panel = new JPanel(new GridLayout(1, 3));
panel.add(new JButton("颜"));
panel.add(new JButton("悦"));
panel.add(new JButton("扬"));
container.add(panel) ;
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
this.setBounds(100,100,500,500);
}
public static void main(String[] ange) {
new JPaneDemo();
}
}
结果为:
JScrollPane
滚动面板。JScrollPane 支持水平和垂直滚动视图。文本区域、表格等需要显示较多数据而空间又有限时,通常使用 JScrollPane 进行包裹以实现滚动显示。
JScrollPane 内包含一个视口(ViewPort),表示 JScrollPane 的显示区域。视口内包含一个需要滚动显示的组件,称为视图。
例如:
package Demo02;
import javax.swing.*;
import java.awt.*;
//面板作为容器不能单独存在,必须放到其他容器里面JFrame,JDialog
public class JScrollDemo extends JFrame {
public JScrollDemo(){
Container container = this.getContentPane();
//文本域
JTextArea textarea =new JTextArea(20,50);
textarea.setText("大数据五班,这是颜悦扬的世界,充满粉色泡泡");
//scroll面板
JScrollPane scrollPane =new JScrollPane(textarea);
// JPanel scrollPane =new JPanel();
// scrollPane.add(textarea);
container.add(scrollPane);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
this.setBounds(100,100,500,500);
}
public static void main(String[] args) {
new JScrollDemo();
}
}
结果为:
(3):布局
FlowLayout(流式布局)
java.lang.Object
–java.awt.FlowLayout
组件按从左到右而后从上到下的顺序依次排列,一行不能放完则折到下一行。
构造函数:
FlowLayout()
建立一个默认为居中对齐,组件彼此有5单位的水平与垂直间距的FlowLayout
FlowLayout(int align)
建立一个可设置排列方式且组件彼此有5单位的水平与垂直间距的FlowLayout
FlowLayout(int align,int hgap,int vgap)
建立一个可设置排列方式与组件间距的FlowLayout
例如:
package Demo03;
import java.awt.FlowLayout;
import java.awt.LayoutManager;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
public class TestFlowLayout2 {
public static void main(String[] args) {
JFrame j=new JFrame();
j.setVisible(true);
j.setBounds(100,100,700,500);
j.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
j.setLayout(new FlowLayout());
JButton button1= new JButton("button1");
JButton button2= new JButton("button2");
JButton button3= new JButton("button3");
JButton button4= new JButton("button4");
JButton button5= new JButton("button5");
JButton button6= new JButton("button6");
j.add(button1);
j.add(button2);
j.add(button3);
j.add(button4);
j.add(button5);
j.add(button6);
}
}
结果为:
GridLayout(网格布局)
java.lang.Object
–java.awt.GridLayout
矩形网格形式对容器的组件进行布置
构造函数:
GridLayout()
建立一个默认为一行一列的GridLayout
GridLayout(int rows,int cols)
建立一个指定行(rows)和列(cols)的GridLayout
GridLayout(int rows,int cols,int hgap,int vgap)
建立一个指定行(rows)和列(cols),且组件间水平间距为hgap、垂直间距为vgap的GridLayout
例如:
package Demo03;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
public class TestGrid {
public static void main(String[] args) {
JFrame j=new JFrame();
j.setVisible(true);
j.setBounds(100,100,700,500);
j.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
j.setLayout(new GridLayout(3,2));
JButton button1= new JButton("button1");
JButton button2= new JButton("button2");
JButton button3= new JButton("button3");
JButton button4= new JButton("button4");
JButton button5= new JButton("button5");
//JButton button6= new JButton("button6");
j.add(button1);
j.add(button2);
j.add(button3);
j.add(button4);
j.add(button5);
//j.add(button6);
j.pack();
}
}
结果为:
BorderLayout(边框布局)
java.lang.Object
–java.awt.BorderLayout
将版面划分成东、西、南、北、中五个区域,将添加的组件按指定位置放置。
BorderLayout.EAST
BorderLayout.WEST
BorderLayout.SOUTH
BorderLayout.NORTH
BorderLayout.CENTER
构造函数:
BorderLayout()
建立组件间无间距的BorderLayout
BorderLayout(int hgap,int vgap)
建立组件间水平间距为hgap,垂直间距为vgap的BorderLayout
例如:
package Demo03;
import javax.swing.*;
import java.awt.*;
import static javax.swing.WindowConstants.EXIT_ON_CLOSE;
//边界布局
public class TestBorderLayout {
public static void main(String[] args) {
JFrame j = new JFrame();
j.setVisible(true);
j.setBounds(100,100,700,500);
JButton east = new JButton("east");
JButton west = new JButton("west");
JButton south = new JButton("south");
JButton north = new JButton("north");
JButton center = new JButton("中心");
j.add(east,BorderLayout.EAST);
j.add(west,BorderLayout.WEST);
j.add(south,BorderLayout.SOUTH);
j.add(north,BorderLayout.NORTH);
j.add(center,BorderLayout.CENTER);
}
}
结果为:
(4):单/多选按钮
单选按钮和复选按钮——实现单选和多选的操作
关键词JCheckBox和JRadioButton 这两个是选择框,一般默认JradioButton是单选
JRadioButton默认单选框,但是需要配合打包之后才能用,使用方法
主程序中定义ButtonGroup dxz;构造类中中将要单选的给add进去dxz=new ButtonGroup();dxz.add(dx1); dxz.add(dx2);
注意:
如果JRadionButton没有第二步的打包操作和复选框一样,都有多选功能,同样JCheckBox打包之后也只能单选、
并且选中和取消
选中一个 checkbox(复选框) 后,再次点击它,即可取消选中
选中一个 radio(单选按钮) 后,再次点击它,不能取消选中
例如:
package Demo04;
import javax.swing.*;
import java.awt.*;
public class RadioButon extends JFrame {
public RadioButon(){
Container container = this.getContentPane();
//单选框
JRadioButton radioButton1 = new JRadioButton("JRadioButton1");
JRadioButton radioButton2 = new JRadioButton("JRadioButton2");
JRadioButton radioButton3 = new JRadioButton("JRadioButton3");
JRadioButton radioButton4 = new JRadioButton("JRadioButton4");
//在一个group里面只能有一个被选中
ButtonGroup group = new ButtonGroup();
group.add(radioButton1);
group.add(radioButton2);
group.add(radioButton3);
container.add(radioButton1,BorderLayout.CENTER);
container.add(radioButton1,BorderLayout.NORTH);
container.add(radioButton1,BorderLayout.SOUTH);
container.add(radioButton1,BorderLayout.EAST);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
this.setBounds(100,100,500,500);
}
public static void main(String[] args) {
new RadioButon();
}
}
结果为:
例如2:
package Demo04;
import javax.swing.*;
import java.awt.*;
public class CheckBox extends JFrame {
public CheckBox(){
Container container = this.getContentPane();
//多选框
JCheckBox checkBox1 = new JCheckBox("自动登录");
JCheckBox checkBox2 = new JCheckBox("记住密码");
JCheckBox checkBox3= new JCheckBox("找回密码");
container.add(checkBox1,BorderLayout.CENTER);
container.add(checkBox2,BorderLayout.EAST);
container.add(checkBox3,BorderLayout.WEST);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
this.setBounds(100,100,500,500);
}
public static void main(String[] args) {
new CheckBox();
}
}
结果为:
(5):列表
下拉列表
例如:
package Demo05;
import javax.swing.*;
import java.awt.*;
public class TextComBoxDemo01 extends JFrame {
public TextComBoxDemo01(){
Container container = this.getContentPane();
//下拉框
JComboBox status = new JComboBox();
status.addItem(null);
status.addItem("正在学习");
status.addItem("准备睡觉");
status.addItem("看电视剧");
status.addItem("熬夜写博客");
container.add(status);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
this.setBounds(100,100,500,500);
}
public static void main(String[] args) {
new TextComBoxDemo01();
}
}
结果为:
无下拉列表
package Demo05;
import javax.swing.*;
import java.awt.*;
import java.util.Vector;
public class TextComBoxDemo02 extends JFrame {
public TextComBoxDemo02(){
Container container = this.getContentPane();
Vector<Object> contens = new Vector();
// String[] contens = {"1","五班","Java"};
JList jList = new JList(contens);
contens.add("五班");
contens.add("颜悦扬");
contens.add("爱学习");
contens.add("看帅哥");
container.add(jList);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
this.setBounds(100,100,500,500);
}
public static void main(String[] args) {
new TextComBoxDemo02();
}
}
结果为:
2020080605041
标签:container,图形界面,布局,JButton,public,add,import,new,Day27 来源: https://blog.csdn.net/m0_55689562/article/details/117755928