图形用户界面设计
布局与事件
一.布局
1.流式布局FlowLayout
package com.HSY.Java_Windows;
import java.awt.*;
public class Java_Windows extends Frame
{
public Java_Windows()
{
super("SIMS");//窗口标题
setSize(200,150);//分别设置宽度和高度
setLayout(new FlowLayout());//设置布局
add(new Button("Student"));//添加界面按钮
add(new Button("Teacher"));
add(new Button("Manage"));
add(new Button("Exit"));
setVisible(true);//设置窗口为可视的
}
}
----------------------------------------------------------------------
package com.HSY.Test;
import com.HSY.Java_Windows.Java_Windows;
public class Test
{
public static void main(String[] args)
{
Java_Windows a = new Java_Windows();
}
}
运行结果:
2.边界布局BorderLayout
package com.HSY.Java_Windows;
import java.awt.*;
public class Java_Windows extends Frame
{
public Java_Windows()
{
super("SIMS");
setSize(200,150);
setLayout(new BorderLayout(10,10));//设置水平间距,竖直间距
add("West",new Button("Student"));
add("North",new Button("Teacher"));
add("East",new Button("Mange"));
add("South",new Button("Exit"));
//每个区域只能放一个组件若要放两个以上的组件,需要使用面板(容器嵌套)
setVisible(true);
}
}
----------------------------------------------------
package com.HSY.Test;
import com.HSY.Java_Windows.Java_Windows;
public class Test
{
public static void main(String[] args)
{
Java_Windows a =new Java_Windows();
}
}
运行结果:
3.网格布局GridLayout
package com.HSY.Java_Windows;
import javax.swing.*;
import java.awt.*;
public class Java_Windows extends Frame
{
public Java_Windows()
{
super("SIMS");
setSize(200,150);
setLayout(new GridLayout(4,1,0,10));//行数,列数,水平间距,竖直间距
add(new JButton("学生"));//javax.swing包中的 JButton() 方法支持中文输入
add(new JButton("教师"));
add(new JButton("管理员"));
add(new JButton("退出"));
//各组件的排列方式:从上到下,从左到右
//与BorderLayout类似,如果想要在一个网格单元中添加多个组件
//必须先在网格单元放一个容器,再将多个组件放在该容器中
setVisible(true);
}
}
---------------------------------------------------
package com.HSY.Test;
import com.HSY.Java_Windows.Java_Windows;
public class Test
{
public static void main(String[] args)
{
Java_Windows a = new Java_Windows();
}
}
运行结果:
4.卡片布局CardLayout
package Java_Windows;
import javax.swing.*;
import java.awt.*;
public class Java_Windows extends Frame
{
public Java_Windows()
{
super("SIMS");
setSize(300,200);
setLayout(new CardLayout(50,50));//水平间距,竖直间距
add(new JButton("学生"));
//与BorderLayout和GridLayout类类似,每张卡片中只能放一个组件
//如果想要在一张卡片放置多个组件
//必须先在卡片放一个容器,再将多个组件放在该容器中
//所以下面三行代码是无效的
add(new JButton("教师"));
add(new JButton("管理员"));
add(new JButton("退出"));
setVisible(true);
}
}
-------------------------------------------------------------
package Test;
import Java_Windows.Java_Windows;
public class Test
{
public static void main(String[] args)
{
Java_Windows a = new Java_Windows();
}
}
运行结果:
二、事件
1.事件监听器及其抽象方法[ (L) = 低级事件,(s) = 语义事件]
接口 | 包含的方法 |
---|---|
ActionListener(S) | actionPerformed |
ItemListener(S) | itemStateChanged |
WindowListener(L) | windowClosing,windowOpened,windowIconified,windowDeiconified,windowClosed,windowActivated,windowDeactivated |
CompoenentListener(L) | componentMoved,componentHidden,componentResized,componentShown |
AdjustmentListener(S) | adjustmentValueChanged |
MouseMotionListener(L) | mouseDragged,mouseMoved |
MouseListener(L) | mousePressed,mouseReleased,mouseEntered,mouseExited,mouseClicked |
KeyListener(L) | keyPressed,keyReleased,keyTyped |
FocusListener(L) | focusGained,focusLost |
ContainerListener(L) | componentAdded,componentRemoved |
TextListener(S) | TextValueChanged |
2.事件适配器
//利用成员内部类实现事件监听
package com.HSY.Java_Windows;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Java_Windows
{
private Frame frame;
private TextArea area;
private TextField field;
private Button buttonEnter;
public Java_Windows()
{
frame = new Frame("SIMS");
area = new TextArea(10,30);
area.setFont(new Font("Times New Roman",Font.BOLD,14));//设置字体,风格,字号
area.setEditable(false);
field = new TextField(26);
buttonEnter = new Button("send");
}
private void init()
{
Panel panelCenter = new Panel();
panelCenter.add(area);
Panel panelSouth = new Panel();
panelSouth.add(field);
panelSouth.add(buttonEnter);
frame.add(panelCenter,BorderLayout.CENTER);
frame.add(panelSouth,BorderLayout.SOUTH);
}
private class TextButtonActionHandler implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
area.append(area.getName() + "\n");
field.setText("");
}
}
private void addEventHandler()
{
buttonEnter.addActionListener(new TextButtonActionHandler());
field.addActionListener(new TextButtonActionHandler());
}
public void showMe()
{
init();
addEventHandler();
frame.pack();
frame.setVisible(true);
}
}
------------------------------------------------------
package com.HSY.Test;
import com.HSY.Java_Windows.Java_Windows;
public class Test
{
public static void main(String[] args)
{
new Java_Windows().showMe();
}
}
运行结果:
java.awt包
学习来源:来源一