JAVA GUI基础建立窗口与布局

  • 新建窗口
import java.awt.*;
import javax.swing.*;

class MyBorderLayout{
	MyBorderLayout(){
		JFrame f=new JFrame();
		f.setSize(500,500);
		f.setVisible(true);
	}
}

public class Demo{
	public static void main(String []arg) {
		new MyBorderLayout();
	}

这段代码新建了一个窗口

作为对比,来看一下这个代码:

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

class MyBorderLayout extends JFrame{
	MyBorderLayout(){
		this.setSize(500,500);
		this.setVisible(true);
	}
}

public class Demo{
	public static void main(String []arg) {
		new MyBorderLayout();
	}
}

运行之后,可以发现两个代码的产生的结果是完全一样的。

教材上所给的代码,都是第二种类型的。这种类型的代码,继承了JFrame类,而JFrame中含有JFrame的构造函数,因此MyBorderLayout类中也含有这个构造函数,我在主方法中新建一个MyBorderLayout类(不要吐槽这个名字,这个名字与现在的内容无关)时候,也同时新建了一个JFrame对象。

而在第一种类型代码中,我没有继承任何类,而是在构造方法中新建了一个JFrame对象,然后对其手动设置进行配置。

这说明,建立GUI程序并不一定要使用继承的方法,可以自己根据实际情况进行操作。

  • JPanel与BorderLayout

【例】

写代码新建如下窗口:

【解】

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

class MyBorderLayout extends JFrame{
	MyBorderLayout(){
		//初始化部件
		JPanel jp1=new JPanel();
		JPanel jp2=new JPanel(); //JPanel构造函数不能指定JPanel名字
		JButton jb1=new JButton("红魔馆"); //JButton的构造函数可以指定JButton名字 
		JButton jb2=new JButton("万事屋"); 
		JButton jb3=new JButton("光坂小镇");
		JButton jb4=new JButton("雾之湖");
		
		//将jb放在jp中
		jp1.add(jb1);
		jp2.add(jb2);
		jp2.add(jb3);
		
		//将jp放在JFrame中		
		this.add(jp1,BorderLayout.NORTH); //是把jpanel放在布局的北边与南边而非jbutton
		this.add(jp2,BorderLayout.SOUTH);
		this.add(jb4,BorderLayout.CENTER);
		
		//配置
		this.setTitle("边界布局格式");
		this.setSize(500,300);
		this.setVisible(true);
	}
}

这段程序需要注意以下几点:

1.对于JFrame和JWindow这样的顶层框架来说,默认的布局管理器是边界布局(BorderLayout);JPanel默认的布局管理器为FlowLayout。将jp放入JFrame中,使用public void add(Component comp, Object constraints)方法(java.awt.Container中)。

2.虽然JFrame默认布局是BorderLayout,但是在对JFrame用public void add(Component comp, Object constraints)进行布局时,并非只能用BorderLayout的参数,比如我将jp1放入时采用FlowLayout.LEFT。

这样也是可以的,只不过界面设计得会比较奇怪。 

  • GridLayout

【例】新建如下窗口:

【解】

import java.awt.*;
import javax.swing.*;
/*
表格布局管理器(GridLayout)

注意的事项: 如果表格数量不够使用时,默认会多加一列。

GridLayout(4,1,5,10)
前面两个参数(4,1)是指网格的行、列数
后面两个参数(5,10)是指组件的水平、垂直间隔
  (一个组件占一个网格)

方法:
int getRows() 
          获取此布局中的行数。 默认值是1
int getColumns() 
          获取此布局中的列数。 默认值是1
 int getHgap() 
          获取组件之间的水平间距。 默认值是0
int getVgap() 
          获取组件之间的垂直间距。默认值是0

设置
void setRows(int rows) 
          将此布局中的行数设置为指定值。默认值是1
void setColumns(int cols) 
          将此布局中的列数设置为指定值。  默认值是1
 void setHgap(int hgap) 
          将组件之间的水平间距设置为指定值。  默认值是0
*/


public class Demo {
    public static void main(String[] args) throws Exception {
    	JFrame jFrame = new JFrame();
        JPanel jp=new JPanel();
        jp.setLayout(new GridLayout(4,4,5,5));
        for(int i=0;i<16;i++){
            jp.add(new JButton(i+"")); //不断添加comp,会自动把他们排列成GridLayout布局
        }
        
        jFrame.add(jp);
        jFrame.setSize(1000,1000);
        jFrame.setLocation(100, 100);
        jFrame.pack();
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jFrame.setVisible(true);
    }
}
发布了29 篇原创文章 · 获赞 6 · 访问量 3409

猜你喜欢

转载自blog.csdn.net/qq_42138454/article/details/102590160