Java学习笔记十五(GUI)

AWT(调用本地GUI实现, c或c++编写,性能略好)

Swing(纯java实现,是awt的升级,样式略好)

1 Container容器

注释:中间容器Panel,ScrollPane依附于容器Frame,Frame直接添加控件会覆盖之前添加控件,需要通过中间容器添加多个控件。

自定义容器:需要继承Frame或Jframe。

获取容器:Container container = this.getContentPane();

1.1 Window窗口容器

包含:1:Frame窗口, 2:Dialog弹窗

AWT:Frame

java 复制代码
Frame f = new Frame([title]);   
f.setLocation(x, y)                      // 设置窗口坐标,单位像素
f.setSize(w, h);                         // 设置窗口宽度,高度
f.setVisible(true);                      // true显示,false隐藏
f.setBounds(x, y ,w, h);                 // 同时设置坐标及宽度高度
f.setResizable(false);                   // 固定窗口大小(false:大小不可变)
f.setBackground( new Color(r,g,b) )      // 设置背景色

// 子窗口
new Dialog(Frame, title, model)          // 子窗口:model=false可操作父窗口
d.setBounds(x, y ,w, h);                    // 子窗口坐标,宽度高度
d.setVisible(true);                         // 子窗口显示

// 文件选择窗口
new FileDialog(Frame, title, FileDialog.Load | FileDialog.SAVE); 

Swing:JFrame

java 复制代码
Jframe f = new Jframe([title])	// Jframe有默认关闭窗口事件
f.setLocation(x, y)				
f.setSize(w, h);				
f.setVisible(true);				
f.setBounds(x, y ,w, h);
f.setResizable(false);
f.setBackground( new Color(r,g,b) )	

// 子窗口
new JDialog(Frame, title, true)

1.2 Panel中间容器

包含 1:控件,2:Applet

AWT:Panel

java 复制代码
Panel p = new Panel()
p.setBounds(x,y,w,h)
p.setBackground(new Color(r,g,b) )
p.add(控件);
f.add(p);

Swing:JPanel

java 复制代码
JPanel p = new JPanel()
p.setBounds(x,y,w,h)
p.setBackground(new Color(r,g,b) )
p.add(控件);
f.add(p);

1.3 ScrollPane(有滚动条中间容器)

AWT:ScrollPane

java 复制代码
ScrollPane sp = new ScrollPane();
sp.add(控件);
f.add(sp);

Swing:JScrollPane

java 复制代码
JScrollPane sp = new JScrollPane();
sp.add(控件);
f.add(sp);

2 布局管理器

2.1 FlowLayout 流式布局

java 复制代码
f.setLayout(new FlowLayout());	// 由左向右,自动换行
f.setLayout(new FlowLayout(FlowLayout.LEFT | FlowLayout.CENTER | FlowLayout.RIGHT));								
f.setLayout(new FlowLayout(FlowLayout.LEFT [水平间距, 垂直间距]));								

2.2 GridLayout 网格布局

java 复制代码
f.setLayout(new GridLayout(行数, 列数));								
f.add(控件);  // 自动布局

2.3 BorderLayout 边框布局

java 复制代码
f.setLayout(new BorderLayout());
f.add(容器, BorderLayout.NORTH); 
// NORTH(上),CENTER(中),SOUTH(下),WEST(左),EAST(右)

2.4 CardLayout 卡片布局

3 控件

3.1 TextField(文本框)

AWT:TextField

java 复制代码
TextField tf = new TextField([text]);
tf.setEnabled(true); // true活性,false非活性
tf.setVisible(true); // true显示,false不显示
tf.setSize(w, h);    // 宽,高
tf.setText("内容");
tf.setEchochar('*'); // AWT专有密码框

Swing:JTextField

java 复制代码
JTextField tf = new JTextField([text]);
tf.setEnabled(true);
tf.setVisible(true); 
tf.setSize(w, h);
tf.setText("内容");
new JPasswordField().setEchoChar('*'); // Swing专有密码框

3.2 TextArea(文本域)

AWT:TextArea ta = new TextArea(); // 方法同文本框一样

Swing:JTextArea ta = new JTextArea(); // 方法同文本框一样

3.3 Checkbox(复选框)

AWT:Checkbox

java 复制代码
Checkbox ck = new Checkbox([label]);
ck.setEnabled(false); // true活性,false非活性
ck.setVisible(true);  // true显示,false不显示
ck.setLabel("显示文本");
ck.setState(true);    // true选中,false未选中

Swing:JCheckBox

java 复制代码
JCheckBox ck = new JCheckBox([text]);
ck.setEnabled(false);  // true活性,false非活性
ck.setVisible(true);   // true显示,false不显示
ck.setText("显示文本");
ck.setSelected(true);  // true选中,false未选中

3.4 CheckboxGroup(单选框)

AWT:CheckboxGroup

java 复制代码
CheckboxGroup cg=new CheckboxGroup(); // 定义分组
checkbox1 = new Checkbox().setLabel(""); // 创建复选框
checkbox1.setCheckboxGroup(cg);          // 复选框加入组内(变为单选)
checkbox2.setCheckboxGroup(cg);          // 复选框加入组内(变为单选)
cg.setSelectedCheckbox(checkbox2);       // 设置默认选中项目
f.add(ck1);                              // 将单选按钮加入容器

Swing:ButtonGroup

java 复制代码
ButtonGroup bg = new ButtonGroup();      // 定义分组
rb1 = new JRadioButton().setText("内容");// 创建单选按钮
bg.add(rb1);                             // 将单向按钮加入分组
bg.add(rb2);
rb2.setSelected(true);                   // 设置默认选中
f.add(rb1);                              // 按钮加入容器

3.5 Label(标签)

AWT:Label

java 复制代码
Label lbl = new Label();
lbl.setEnabled(false);
lbl.setVisible(true);
lbl.setText("内容");

Swing:JLabel

java 复制代码
JLabel lbl = new JLabel();
lbl.setEnabled(false);
lbl.setVisible(true);
lbl.setText("内容");

3.6 Choice(下拉框)

AWT:Choice

java 复制代码
Choice cho = new Choice();
cho.setEnabled(false);
cho.setVisible(true);

cho.add("内容1");        // 添加元素
cho.addItem("内容2");    // 添加元素
cho.select(0);          // 根据下标设置默认选中项目
cho.select("内容2");    // 根据内容设置默认选中项目
cho.remove(0);          // 删除下标0元素
cho.remove("内容2");    // 删除指定内容元素

int index = cho.getSelectedIndex());  // 获取选中项目下标
String item = cho.getSelectedItem()); // 获取选中项目内容

Swing:JComboBox

java 复制代码
JComboBox<String> cb = new JComboBox<String>();
cb.setEnabled(false);
cb.setVisible(true);

cb.addItem("内容2");              // 添加元素
cb.setSelectedIndex(0);          // 根据下标设置默认选中项目
cb.setSelectedItem("内容2");     // 根据内容设置默认选中项目
cb.remove(下标0);                // 删除指定下标元素
cb.removeItem("内容2");          // 删除指定内容元素

int index = cb.getSelectedIndex());  // 获取选中项目下标
String item = cb.getSelectedItem()); // 获取选中项目内容

3.7 List(列表框)

AWT:java.awt.List

java 复制代码
java.awt.List list = new List();
list =new List(同时显示数量);
list =new List(同时显示数量, false); // 默认false不可多选

list.setEnabled(false);
list.setVisible(true);

list.add("item1");
list.add("item1", 插入下标);

list.select(下标);                     // 选中项目
list.deselect(下标);                   // 取消选中
list.isIndexSelected(下标)             // 判断指定下标是否选中

int index = list.getSelectedIndex()    // 获取选中项目下标
String item = list.getSelectedItem();  // 获取选中项目内容

list.remove(下标)                      // 删除指定下标元素
list.remove("内容");                   // 删除指定内容元素

Swing:javax.swing.JList

java 复制代码
javax.swing.Jlist list = new Jlist<String>(数组);

DefaultListModel<String> model = new DefaultListModel<>();
list = new JList<String>(model);
list.setEnabled(false);
list.setVisible(true);

model.addElement("item1");
model.add(下标, "item1");

list.setListData(数组);
list.setSelectIndex(下标);          // 选中指定下标项目
list.isSelectedIndex(下标)          // 判断是否选中

int index = list.getSelectedIndex();   // 获取选中项目下标
String val = list.getSelectedValue();  // 获取选中项目内容

model.remove(下标);

3.8 Button(按钮)

AWT:Button

java 复制代码
btn =new Button("按钮名");
btn.setEnabled(false);
btn.setVisible(true);
btn.setSize(w, h);

Swing:JButton

java 复制代码
btn =new JButton("按钮名");
btn.setEnabled(false);
btn.setVisible(true);
btn.setSize(w, h);

3.9 ImageIcon(图片)

Swing:ImageIcon

java 复制代码
URL url = 类.class.getResource("xx.jpg");	// 获取图片路径
ImageIcon img = new ImageIcon(url);			// 创建图片控件
JLabel lb = new JLabel(img);				// 添加到Label容器中
JButton btn = new JButton(img)				// 添加到Button容器中
lb | btn.setIcon(img);				        // 修改图片
f.add(lb);				

4 事件处理

4.1 窗口关闭事件

AWT:AWT没有默认窗口关闭事件,需要手动添加

java 复制代码
frame.addWindwoListener(new WindowAdapter(){
    @Override
    public void windwoClosing(WindowEvent e){
        System.exit(0); 
    }
});

Swing:

java 复制代码
jframe.setDefaultCloseOperatin(						
    WindowConstans.EXIT_ON_CLOSE    // Swing退出并关闭程序
)						
// HIDE_ON_CLOSE					// 默认(隐藏)
// DO_NOTHING_ON_CLOSE				// 什么也不做

4.2 组件激活事件

AWT和Swing通用

触发组件:ActionListener// JTextField,JCheckBox,JComboBox,Jbutton

java 复制代码
btn.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        Jbutton btn = (Jbutton)e.getSource(); // 可获取单击事件标签
    }
});

4.3 其它事件

(1) 选择组件:ItemListener// JCheckBox,JComboBox,Jbutton

(2) 键盘输入:KeyListener// JTextField,JTextArea,JCheckBox,Jlabel,JComboBox,Jbutton

(3) 失去光标:FocusListener // JTextField,JTextArea,JCheckBox,Jlabel,JComboBox,Jbutton

(4) 文本变化:TextListener // TextField

5 菜单

AWT:Menu, MenuItem, MenuBar

java 复制代码
// 创建menu菜单
Menu m1 = new Menu("menu1");
  // 创建菜单项目
  MenuItem it11 = new MenuItem("itme11");
  m1.add(it11); // 添加进menu

  // 创建子菜单
  Menu m12 = new Menu("menu12");
  // 创建子菜单项目
  MenuItem it121 = new MenuItem("itme121");
  m12.add(it121); // 添加子菜单
  m1.add(m12);    // 将子菜单添加进Menu

// 创建菜单容器
MenuBar mb = new MenuBar();
mb.add(m1);      //将menu添加进容器
f.setMenuBar(mb);//将容器添加进frame

AWT效果:

Swing:JMenu, JMenuItem, JMenuBar

java 复制代码
// 创建menu菜单
JMenu m1 = new JMenu("menu1");
  // 创建菜单项目
  JMenuItem it11 = new JMenuItem("itme11");
  m1.add(it11); // 添加进menu

  // 创建子菜单
  JMenu m12 = new JMenu("menu12");
  // 创建子菜单项目
  JMenuItem it121 = new JMenuItem("itme121");
  m12.add(it121); // 添加子菜单
  m1.add(m12);    // 将子菜单添加进Menu

// 创建菜单容器
JMenuBar mb = new JMenuBar();
mb.add(m1);       //将menu添加进容器
f.setJMenuBar(mb);//将容器添加进JFrame

Swing效果:

6 弹窗

Swing:showMessageDialog,showConfirmDialog

java 复制代码
// 信息弹窗
JOptionPane.showMessageDialog(frame, 
    "内容", 
    "窗口名", 
    JOptionPane.ERROR_MESSAGE);		// 错误信息
// JOptionPane.INFORMATION_MESSAGE	// 提示信息
// JOptionPane.WARNING_MESSAGE		// 警告信息
// JOptionPane.QUESTION_MESSAGE		// 询问信息
// JOptionPane.PLAIN_MESSAGE		// 普通信息

// 询问弹窗
int res = JOptionPane.showConfirmDialog(frame, 
    "内容", 
    "窗口名", 
    JOptionPane.YES_NO_CANCEL_OPTION);			// 显示(是_否_取消)
// JOptionPane.YES_NO_OPTION				    // 显示(是_否)
// JOptionPane.OK_CANCEL_OPTION				    // 显示(OK_取消)
// JOptionPane.OK_OPTION				        // 显示(OK)
// JOptionPane.CLOSED_OPTION				    // 显示(关闭)

    if(res == JOptionPane.YES_OPTION) {			// 按下(是)
        ...
    } else if(res == JOptionPane.NO_OPTION) {	// 按下(否)
        ...
    } else if(res == JOptionPane.CANCEL_OPTION) { // 按下(取消)	
        ...
    }
						
// 输入弹窗
String input = JOptionPane.showConfirmDialog(frame, 
    "内容", 
    "窗口名", 
    JOptionPane.PLAIN_MESSAGE);	// 信息入力弹窗

7 画笔

7.1 画图

java 复制代码
public class GrapTest extends Frame {					
    @Override					
    public void paint(Graphics g) {					
        g.setColor(Color.RED);			// 设置画笔颜色
        g.drawString("hello", 100, 100);// 写字符串
        g.drawImage					    // 写图片
        g.drawLine					    // 写线
        g.drawOval(x, y, w, h);			/  写空心圆
        g.drawRect(x, y, w, h);			// 写空心矩形
        g.fillOval(x, y, w, h);			// 写实心圆
    }					

7.2 画笔

java 复制代码
GrapTest g = new GrapTest();					
g.setVisiable(true);					打开Frame自动画图

g.addMouseListener(	new MouseAdapter() {
    @Override		
    public void mousePressed(MouseEvent e){	// 鼠标按下事件
        Frame f = (Frame)e.getSource();					
        全局list.add(e.getPoint());			// 获取鼠标坐标添加到list
        f.repaint();					    // 刷新画面,调用print循环画图
    }					
    // 重写上记画图paint方法,循环list画点				
})	
相关推荐
陈年老古董1 小时前
矿物分类实战:从传统机器学习到深度学习(含PyTorch实现)
笔记·深度学习·学习·机器学习·分类
落木萧萧8251 小时前
MyBatis 关联查询的四种写法,为什么最后都变回了手写 XML
java·数据库·后端
csdn2015_1 小时前
java springboot项目,接收到的参数多个逗号
java·开发语言·spring boot
咖啡忍者1 小时前
【SAP】100小时学会SAP-5生产计划PP
笔记
cui_hao_nan1 小时前
Spring AOP 自调用、代理与 private 方法引发的诡异 NPE
java·后端·spring·ai开发
春风解人意1 小时前
从零开始学习嵌入式P35----数据库
数据库·嵌入式硬件·学习
sunoo-2291 小时前
【网络编程 + 数据库】select 与 epoll 核心区别详解 + SQLite 入门到 C 接口全攻略
linux·网络·数据库·vscode·学习·sqlite
码艺-Alimjan1 小时前
维吾尔语数字转文本
java·javascript·python·算法·go
摇滚侠1 小时前
《SpringBoot 3:入门与应用实战》第 13 章 整合 MyBatis MyBatis 简单开发 阅读笔记 39
spring boot·笔记·mybatis