Java之常用图形用户界面

用户界面标题
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;

public class Text_Title extends JFrame implements ActionListener {

	JButton english = new JButton("English Title");
	JButton 中文 = new JButton("中文标题");
	
	Text_Title()
	{
		setLayout(new BorderLayout(10,100));
		
		add(english,BorderLayout.NORTH);
		
		add(中文,BorderLayout.CENTER);
		english.addActionListener(this);
		中文.addActionListener(this);
		setLocation(100,100);//设置窗口的位置
		setSize(250,150);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	public void actionPerformed(ActionEvent ae)
	{
		if(ae.getSource() == english)
		{
			this.setTitle("The first GUI");
		}
		if(ae.getSource() == 中文)
		{
			this.setTitle("第一个图形界面");
		}
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Text_Title();
	}

}

由于java在编译的时候,只会将用到的具体的包编译,所以为了方便,可以直接将上一级的包直接引入。
一般来说,关于用户自定义界面的组件一般都在 javax.swing中,可以直接引入这个包,也可以引入具体的包;
关于布局方式,如流布局,盒子布局,网格布局等布局风格在包 java.awt中,同样可以引入具体的包,也可以直接引入上一级包(java.awt).
事件监听与实现的方法在包java.awt.event中,直接引入即可
注意
使用事件监听与实现的方法不止这一种,下面举例是另一种常用的方法

english.addActionListener(new ActionListener()
				{
				public void actionPerformed(ActionEvent ae)
				{
//					if(ae.getSource() == english)
//					{
//						this.setTitle("The first GUI");
//					}
//					if(ae.getSource() == 中文)
//					{
//						this.setTitle("第一个图形界面");
//					}
				}
				});

直接在参数位置实现监听。

用户界面布局方式
流布局
import java.awt.*;

import javax.swing.*;

public class Text_FlowLayout {

	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		JFrame f = new JFrame();
		f.setLayout(new FlowLayout(FlowLayout.RIGHT,10,15));
		JButton[] buttons = new JButton[5];
		
		for(int i = 0 ; i < 5; i++)
		{
			buttons[i] = new JButton("按钮" +i);
			f.add(buttons[i]);
		}
		f.setTitle("验证FlowLaout");
		f.setBounds(100, 200, 250, 150);
		f.setVisible(true);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

}
JFrame f = new JFrame();
f.setLayout(new FlowLayout(FlowLayout.RIGHT,10,15));

创建用户框,利用流布局,第一个参数可以简单理解为对齐方式,第二个是水平间隔,第三个参数是组件之间以及组件与容器边界之间的垂直距离。
setBounds 四个参数为:
距离父物体的x值,y的值 第三个参数是边界的宽度和高度
注意
当使用流布局的时候,流布局的方式有三种对齐方式:居中、居左、居右
下面三张图分别是三种对齐方式的效果图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当用户框足够大的时候,对齐方式就会体现出来,如果框不够大,会自动的将组件分行,同时居左、中、右对齐;
如果用户框很小 所有组件会被压缩到一列,但会有一个宽度限制,有最小的宽度
在这里插入图片描述
同时如果高度不够的话,组件过多不会显示完全,需要自己添加滚动界面,稍后会有。
在这里插入图片描述

网格布局
import java.awt.*;

import javax.swing.JButton;
import javax.swing.JFrame;

@SuppressWarnings("serial")
public class TestGridLayout extends JFrame {

	/**
	 * 
	 */
	
	TestGridLayout()
    {
          

          setLayout(new GridLayout(3,2,5,15));

          for(int i=0; i<10; i++)
          {
                  add(new JButton("按钮" + (i+1)));
           }
           setTitle("GridLayout布局");
           setLocation(200, 200);
           setSize(250, 250);
           setVisible(true);
           setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     }
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new TestGridLayout();
	}

}

网格布局最大的特点就是,可以根据自己的需要,将用户界面分布成想要的行数和列数。

setLayout(new GridLayout(3,2,5,15));

根据参数顺序,其意义分别是:行数,列数,组件间的行间距,组件间的列间距;
注意
如果你的行列之积不是你要分布的组件的个数,网格布局会自动的按照你的行来排列,列数为最小列数,比如我现在有10个组件,如果时2行5列,如下图。
在这里插入图片描述
但是如果我是3行5列
3*5=15 比现有的要分配的组件个数多
在这里插入图片描述
他会按照行来排列,列按照最大列数排列。

Border布局
import java.awt.*;

import javax.swing.*;

public class Text_BorderLayout extends JFrame {

	
	Text_BorderLayout()
	  {
	     add(BorderLayout.NORTH,new JButton("北区"));
	     //add(BorderLayout.NORTH,new JButton("又北区"));
	     add(BorderLayout.SOUTH,new JButton("南区"));
	     add(BorderLayout.EAST,new JButton("东区"));
	     add(BorderLayout.WEST,new JButton("西区"));
	     add(BorderLayout.CENTER,new JButton("中区"));

	     setTitle("BorderLayout布局");
	     setLocation(200, 200);
	     setSize(250, 250);
	     //setBounds(200,200,600,600);
	     setVisible(true);          
	     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	  }
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Text_BorderLayout();
	}

}

Border布局最大的特点就是将用户界面框分成了五个方位,分别是东西南北中;

面板Pane
import java.awt.*;
import javax.swing.*;
public class TestPanel extends JFrame {

	JLabel path = new JLabel("请输入文件路径和名称");
	JTextField filePath = new JTextField();
	JLabel append = new JLabel("请出入要追加的内容:");
	JTextField appendContent = new JTextField();
	JButton button = new JButton("将文本区的内容写入文件");
	JTextArea area = new JTextArea();
	TestPanel()
	{
		JPanel north = new JPanel();
		north.setLayout(new GridLayout(3,2,0,5));
		north.add(path);
		north.add(filePath);
		north.add(append);
		north.add(appendContent);
		north.add(button);
		
		add(north,BorderLayout.NORTH);
		add(new JScrollPane(area),BorderLayout.CENTER);
		setLocation(100,100);
		setSize(400,300);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new TestPanel();
	}

}

创建标签 :JLabel path = new JLabel(“请输入文件路径和名称”);
创建Text输入条:JTextField filePath = new JTextField();
创建文本输入框:JTextArea area = new JTextArea();
添加滚动框:add(new JScrollPane(area),BorderLayout.CENTER);
注意
如果如上添加滚动框当你的横向,纵向的文本超过用户框大小的时候,都会为你创建滚动栏。

将path、filepath、append、append Content、button添加到面板中,通过Border布局将其添加到当前用户框的北面。

在这里插入图片描述

分割线
import java.awt.*;
import javax.swing.*;
class Test_JSplitPane extends JFrame {
	
	JSplitPane spiltPane;
	JTextArea t1,tw;
	JButton button;
	Test_JSplitPane(String s)
	{
		setTitle(s);
		button = new JButton("请输入内容");
		
		t1 = new JTextArea();
		tw = new JTextArea();
		
		add(button,BorderLayout.NORTH);
		spiltPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,t1,tw);
		//spiltPane.setDividerLocation(200);
		add(spiltPane,BorderLayout.CENTER);
		validate();
        setSize(260,270);
        setLocation(120,120);
        setVisible(true);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);     
	}
}
public class TestJSplitPane 
{
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Test_JSplitPane("JSplitPane类举例");
	}
}

创建分割线:
spiltPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,t1,tw);
第一个参数是 分割线的样式,分别有两种水平分割以及垂直分割;
23参数是文本框区域

将分割面板添加到当前的用户界面框中:
add(spiltPane,BorderLayout.CENTER);

注意
如果不设置分割线的位置:默认分割线的位置在用户框的最左面;
设置分割线的方法为:spiltPane.setDividerLocation(200);

设置分割线与不设置的区别
在这里插入图片描述
在这里插入图片描述
不管是否设置分割线的位置,分割线都是可以拖动的,设置位置的作用就是,在最初显示的时候符合一些要求。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值