用户界面标题
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);
设置分割线与不设置的区别
不管是否设置分割线的位置,分割线都是可以拖动的,设置位置的作用就是,在最初显示的时候符合一些要求。