1.创建一个界面
1.窗口的创立
JFrame frame=new JFrame("界面登录");
//设置颜色
frame.getContentPane().setBackground(Color.DARK_GRAY);
//设置布局为空
frame.setLayout(null);
//设置大小及初始位置
frame.setBounds(500,300,500,200);
//关闭窗口
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//窗口大小是否固定
frame.setResizable(false);
frame.setVisible(true);
1.JFrame()
JFrame frame=new JFrame("界面登录");
JFrame为添加一个界面
2.setBackground()
frame.getContentPane().setBackground(Color.DARK_GRAY);
因为JFrame不能直接添加组件,需要用getContentPane()函数获取内容面板,再在内容面板上进行添加组件。
然后进行背景颜色的设置
3…setBounds()
frame.setBounds(500,300,500,200);
窗口初始大小中四个参数表示窗口的位置与大小。
4.setResizable()
frame.setResizable(false);
当参数设为false时窗口可以调整大小,当参数设为true时,窗口始终保持初始大小
5. setVisible()
frame.setVisible(true);
在最后将显示窗口设为true,否则无法显示窗口
2.窗口的关闭方式
frame.setDefaultCloseOperation(参数);
1.WindowConstants.DO_NOTHING_ON_CLOSE
frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
The do-nothing default window close operation
无操作默认窗口关闭操作
2.WindowConstants.HIDE_ON_CLOSE
frame.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
The hide-window default window close operation
隐藏窗口默认的窗口关闭操作
3.WindowConstants.DISPOSE_ON_CLOSE
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
The dispose-window default window close operation.
释放窗口默认窗口关闭操作
4.WindowConstants.EXIT_ON_CLOSE
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
The exit application default window close operation
退出应用程序时默认的窗口关闭操作
2.界面布局方法
frame.setLayout(参数)
1.边界布局 BorderLayout()
1.说明
frame.setLayout(new BorderLayout());
这是一个布置容器的边框布局,它可以对容器组件进行安排,并调整其大小,使其符合下列五个区域:北、南、东、西、中。每个区域最多只能包含一个组件,并通过相应的常量进行标识:NORTH 、SOUTH 、EAST 、WEST 、CENTER。当使用边框布局将一个组件添加到容器中时,要使用五个常量之一
2.举例
BorderLayout borderLayout=new BorderLayout();
frame.setLayout(borderLayout);
borderLayout.setHgap(5);
borderLayout.setVgap(10);
//添加按钮
Button button=new Button("间距1");
frame.add(button,BorderLayout.WEST);
Button button1=new Button("间距2");
frame.add(button1,BorderLayout.NORTH);
Button button2=new Button("间距3");
frame.add(button2,BorderLayout.CENTER);
2.流式布局 FlowLayout()
1.说明
//流式布局
FlowLayout flowLayout=new FlowLayout();
//设置对齐方式
flowLayout.setAlignment(FlowLayout.RIGHT);
frame.setLayout(flowLayout);
流式布局用于安排有向流中的组件,流的方向取决于容器的componentOrientation属性,它可能是以下两个值中的一个:
流布局一般用于安排面板中的按钮。它使得按钮呈水平放置,直到同一条线上再也没有合适的按钮。
2.举例
//流式布局
FlowLayout flowLayout=new FlowLayout();
//设置对齐方式
flowLayout.setAlignment(FlowLayout.RIGHT);
frame.setLayout(flowLayout);
//设置按钮
Button button=new Button("按钮1");
Button button1=new Button("按钮2");
Button button2=new Button("按钮3");
frame.add(button);
frame.add(button1);
frame.add(button2);
3.卡片布局 CardLayout()
1.说明
CardLayout layout=new CardLayout();
frame.setLayout(layout);
CardLayout对象是容器的布局管理器。它将容器中的每个组件看作一张卡片。一次只能看到一张卡片,容器则充当卡片的堆栈。当容器第一次显示时,第一个添加到CardLayout对象的组件为可见组件。
卡片的顺序由组件对象本身在容器内部的顺序决定。CardLayout定义了一组方法,这些方法允许应用程序按顺序地浏览这些卡片,或者显示指定的卡片。
2.举例
//卡片布局
CardLayout layout=new CardLayout();
frame.setLayout(layout);
Button button=new Button("按钮1");
Button button1=new Button("按钮2");
Button button2=new Button("按钮3");
frame.add(button);
frame.add(button1);
frame.add(button2);
4.网格布局 GridLayout()
1.说明
GridLayout gridLayout=new GridLayout();
frame.setLayout(gridLayout);
//将排数设置为两排
gridLayout.setRows(2);
GridLayout类是一个布局处理器,它以矩形网格形式对容器的组件进行布置。容器被分为大小相等的矩形,一个矩形中放置一个组件。
通过构造方法或 setRows 和 setColumns 方法将行数和列数都设置为非零值时,指定的列数将被忽略。列数通过指定的行数和布局中的组件总数来确定。
2.举例
//网格布局
GridLayout gridLayout=new GridLayout();
frame.setLayout(gridLayout);
//将排数设置为两排
gridLayout.setRows(2);
frame.setLayout(gridLayout);
for (int i = 0; i < 10; i++) {
frame.add(new Button(i+"号按钮"));
}
3.界面操作
1.分面板的使用
JSplitPane pane= new JSplitPane();
pane.setOrientation(JSplitPane.HORIZONTAL_SPLIT);//横向分割
pane.setLeftComponent(new JScrollPane(tree));
pane.setRightComponent(new JScrollPane(area));
frame.add(pane);
使用分面板时我们可以对页面进行分割
分面板既可以左右分割又可以上下分割
2.多面板的使用
JTabbedPane pane=new JTabbedPane();
pane.addTab("一",new JPanel(){{setBackground(Color.ORANGE);}});
pane.addTab("二",new JPanel(){{setBackground(Color.pink);}});
frame.add(pane);
使用多面板时可以任意切换页面
4.各种组件的使用
1.标签
JLabel lab = new JLabel("标签中字体");
//将图片添加到标签中,"src/2.jpg"是图片的地址
Icon pic1 = new ImageIcon("src/2.jpg");
lab.setIcon(pic1);
lab.setBounds(35, 35, 45, 45); //设置标签的大小
lab.setOpaque(true); //必须设置不透明,否则将不显示颜色
lab.setForeground(Color.ORANGE); //设置标签中字体颜色
lab.setBackground(new Color(170,224,238)); //设置标签背景颜色
2.单行文本框
1.普通文本框
JTextField field=new JTextField();
field.setBounds(x,y,width,height);//设置位置
field.setFont(new Font("simSon", Font.BOLD,20));//设置字体及大小
2.密码框
JPasswordField passwordField=new JPasswordField();
passwordField.setBounds(x,y,width,height);
passwordField.setEchoChar('*');//文本显示为*号
passwordField.setFont(new Font("simSon", Font.BOLD,20));
3.文本域
JTextArea text = new JTextArea("文本区中文字");
text.setLineWrap(true); //使文本区中的文字自动换行
text.setWrapStyleWord(true);
text.setEditable(false); //设置不可编辑
text.setFont(font);
text.setBounds(35,90, 230, 80);
4.按钮
JButton bt=new JButton("按钮中字体");
bt.setBorderPainted(false); //去掉按钮边界
bt.setForeground(Color.black); //设置按钮中字体颜色
bt.setFont(font); //设置按钮中字体
bt.setOpaque(true); //必须设置不透明,否则将不显示颜色
bt.setBackground(new Color(255,236,242)); //设置按钮背景颜色
bt.setBounds(270,635,130,30); //设置按钮的位置和大小
5.勾选框
JCheckBox checkbox=new JCheckBox("显示密码");
checkbox.setBounds(x,y,width,height);
6.单选框
// 创建单选钮
JRadioButton rdoMan = new JRadioButton("男");
JRadioButton rdoWoman = new JRadioButton("女");
// 创建按钮组
ButtonGroup group = new ButtonGroup();
group.add(rdoMan);
group.add(rdoWoman);
// 设置默认选择
rdoMan.setSelected(true);
7.表格
DefaultTableModel model = new DefaultTableModel();
model.addColumn("周六", new Vector<Integer>());
model.addColumn("周日", new Vector<Integer>());
model.addColumn("周一",new Vector<String>());
model.addColumn("周二",new Vector<String>());
model.addColumn("周三",new Vector<String>());
model.addColumn("周四", new Vector<String>());
model.addColumn("周五",new Vector<String>());
JTable table = new JTable(model);
//将表格放在滚动面板中
JScrollPane jp = new JScrollPane(table);
jp.setBounds(35, 190, 330, 73);
//设置水平和垂直滚动条
jp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
jp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
//设置留有空白的表格行数,即30,调用方法addRow,添加列数调用方法addColumn()
for(int k = 0;k < 30 ;k ++) {
model.addRow(new Vector<Integer>());
}
model.setValueAt("123",2,3);
frame.add(jp);
5.对事件进行监听
1.窗口事件的监听
package listen;
import javax.swing.*;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
/**
* 功能:窗口事件演示
*/
public class WindowEventDemo extends JFrame {
public static void main(String[] args) {
// 创建窗口对象
JFrame frame = new JFrame("窗体事件演示");
// 设置窗口属性
frame.setSize(400, 300);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 给窗口注册监听器
frame.addWindowListener(new WindowListener() {
@Override
public void windowOpened(WindowEvent e) {
System.out.println("windowOpened--窗体打开事件");
}
@Override
public void windowClosing(WindowEvent e) {
System.out.println("windowClosing--窗体正在关闭事件");
}
@Override
public void windowClosed(WindowEvent e) {
System.out.println("windowClosed--窗体已关闭事件");
}
@Override
public void windowIconified(WindowEvent e) {
System.out.println("windowIconified--窗体图标化事件");
}
@Override
public void windowDeiconified(WindowEvent e) {
System.out.println("windowDeiconified--窗体取消图标化事件");
}
@Override
public void windowActivated(WindowEvent e) {
System.out.println("windowActivated--窗体激活事件");
}
@Override
public void windowDeactivated(WindowEvent e) {
System.out.println("windowDeactivated--窗体停用事件");
}
});
}
}
2.鼠标事件的监听
package listen;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
/**
* 功能:鼠标事件演示
*/
public class MouseEventDemo {
public static void main(String[] args) {
// 创建窗口对象
JFrame frame = new JFrame("鼠标事件演示");
// 设置窗口边界
frame.setBounds(200, 200, 300, 200);
// 设置屏幕居中(采用相对定位方式)
frame.setLocationRelativeTo(null);
// 设置窗口布局
frame.setLayout(new FlowLayout());
// 创建按钮对象
JButton btnTest = new JButton("测试按钮");
// 将按钮添加到窗口
frame.add(btnTest);
// 设置窗口可见
frame.setVisible(true);
// 设置默认关闭方式(关闭窗口就退出应用程序)
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 给按钮注册鼠标监听器
btnTest.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("mouseClicked--鼠标完成单击事件");
}
@Override
public void mousePressed(MouseEvent e) {
System.out.println("mousePressed--鼠标按下事件");
}
@Override
public void mouseReleased(MouseEvent e) {
System.out.println("mouseReleased--鼠标放开事件");
}
@Override
public void mouseEntered(MouseEvent e) {
System.out.println("mouseEntered--鼠标进入按钮区域事件");
}
@Override
public void mouseExited(MouseEvent e) {
System.out.println("mouseExited--鼠标移出按钮区域事件");
}
});
}
}
3.按键事件的监听
package listen;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
/**
* 功能:按键事件演示
*/
public class KeyEventDemo {
public static void main(String[] args) {
// 创建窗口对象
JFrame frame = new JFrame("按键事件演示");
// 设置窗口边界
frame.setBounds(200, 200, 300, 200);
// 设置屏幕居中(采用相对定位方式)
frame.setLocationRelativeTo(null);
// 设置窗口布局
frame.setLayout(new FlowLayout());
// 创建文本框对象
JTextField txtTest = new JTextField(15);
// 将文本框添加到窗口
frame.add(txtTest);
// 设置窗口可见
frame.setVisible(true);
// 设置默认关闭方式(关闭窗口就退出应用程序)
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 给文本框注册按键监听器
txtTest.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
// 获取按键字符
char keyChar = e.getKeyChar();
// 获取按键字符的键码
int keyCode = e.getKeyCode();
System.out.println("按键字符:" + keyChar + "\t按键代码:" + keyCode);
}
@Override
public void keyReleased(KeyEvent e) {
}
});
}
}