----------------------------------------------------------------------------------------
👨💻个人主页:@元宇宙-秩沅
hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!
本文由 秩沅 原创
收录于专栏 java
⭐Java窗口组件以及事件处⭐
文章目录
- ⭐Java窗口组件以及事件处⭐
- 一,==常用组件,容器和布局==
- 👨💻联系图
- 👨💻组件
- 👨💻容器
- 👨💻FlowLayout布局
- 二,==事件与监听==
- 👨💻事件👍
- 三,==典例解析==
- 👨💻例题👍
- 👨💻上代码👍
- 👨💻运行结果👍
一,常用组件,容器和布局
👨💻联系图
👨💻组件
(1)JTextField --文本框
输入单行文本
(2)JTextArea–文本区
输入多行文本
(3)JButton–按钮
单击按钮
(4)JLable–标签
提供提示信息
(5)JChexkBox–复选框
提供多项选择
(6)JCombobox—下拉列表
下拉列表
(7)JPasswordField --密码框
输入密码
👨💻容器
(0)JFrame–底层容器
英文记忆 :Frame 框架
Frame是窗口,窗口也是容器,下面的容器都称为为中间容器
(1)JPanel–面板容器
英文记忆 :Panel 面板
默认布局为FlowLayout布局
(2)JTabbedPane --选项卡窗格容器
英文记忆 :Tabbel 选择
可作为中间容器,添加组件后课自动指定选项卡
1. 静态方法: add( strng a , Component c ) -----添加组件
2. 构造方法:public JTabbedPane( int tabPlacement ) --- tabPlacement 决定选项卡的位置
(3)JScrollPane—滚动窗格容器
英文记忆 :Scroll 滚动
只可以添加一个组件,通过滚动条来观看该组件
一般将JTextArea 文本区 放到滚动窗格中
JScrollPane scroll = new JScrollPane ( new JtextArea ( ) );
(4)JSplitPane—拆分窗格容器
英文记忆 :Split 分离
被分成两部分的容器: 水平拆分窗格 ,垂直拆分窗格
1.静态常量:
水平拆分 :HORIZONTAL_SPLIT
垂直拆分:VERTICAL_SPLIT
2. 构造方法:
JSplitPane( int a , Component b , Component c )
JSplitPane( int a ,boolean d , Component b , Component c )
3,解释
参数a 填上面的两个静态常量来决定水平或垂直拆分
参数d决定拆分线移动时组件是否发生连续变化
(5)JLayeredPane----分层窗格
英文记忆 :Layered 分层
可将需要处理重叠问题的组件添加到分层窗格中,分窗格分为五层
1.静态方法: add( JComponent com , int layer )
2.解释 : 参数layer 填:
DEFAULT_LAYER 第一层
PALETTE_LAYER 第二层
MODAL_LAYER 第三层
POPUP_LAYER 第四层
DRAG_LAYER 第五层
👨💻FlowLayout布局
(1)FlowLayout布局
英文记忆 :flow 跟随,顺从
是JPanel(面板)的默认布局 ,特点:对象居中对齐,先后顺序,从左到右排列
使用FlowLAyout的容器 , 要改变组件大小的方法,如容器中的按钮组件:
button.setPreferredSize( new Dimension ( 长 , 宽 ) )
(2)BorderLayout布局
英文记忆 :Border 边界
将区域划分 东 西 南 北 中 五个区域
如使用BorderLayout布局的容器con ,添加组件b 到北方区域
方法 : con.add( b , BorderLayout . NORTH ) ;
静态常量:
EAST
WEST
SOUTH
NORTH
CENTER
(3)CardLayout布局
英文记忆 :card 卡片
叠扑克牌布局 , 点击组件,同一时刻只能 显示一个
如:布局设置在容器con设置方法
(1)CardLayout card = new CardLayout();
(2)con .setLayout( card ) ; //设置布局
(3)con.add( String a , Component b ) ; //添加组件进入设置好布局的容器
(4)card.show( con , string a ); //显示容器中名字为a 的组件
(4)GridLayout布局
英文记忆 :Grid 网格
GridLayout是使用较多的布局编辑器,将组件划到网格中
(5)NULL布局
可以DIY随意组件的位置 ,例如:p是个容器
方法: p.setLayout( null ) ;
组件. setBounds( int a , int b , int width ,int height );
a b 代表组件的位置
width height代表组建的长和宽
二,事件与监听
👨💻事件👍
(1)DocumentEvent事件
1.注册监视器
(xx.getDocument()).addDocummentListener( DocumentListen YY );
2,重写接口中的方法
方法 | 描述 |
---|---|
public void changedUpDate() | 发出属性或属性集已更改的通知 |
public void removeUpDate() | 通知文档有删除 |
public void insertUpDate() | 通知文档有插入 |
三,典例解析
👨💻例题👍
- 实现一个标题为计算的窗口,窗口的布局为follow layout布局,
在窗口中添加两个文本区,当用户在一个文本区中输入若干个数时,
另一个文本区对输入的数进行求和运算并求出平均值,
也就是说随着用户输入的变化,另一个文本区不断的更新求和及平均值。
👨💻上代码👍
package jiemian;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
public class Man {
public static void main(String[] args) {
window w1 = new window("计算",450,450,450,450);
}
}
@SuppressWarnings("serial")
class window extends JFrame implements DocumentListener{
JTextArea t1 ,t2 ; //JTextArea -文本区组件
double sum=0 ,avg = 0; //求和 和 平均值 的变量
window(String A ,int a ,int b ,int c ,int d){
setTitle(A);
setBounds(a,b,c,d);
//JPanel MB = new JPanel(); //创建一个面板容器
FlowLayout ron = new FlowLayout();
setLayout(ron); //设置一个FlowLayout的布局
t1 = new JTextArea(5 , 10 ) ;
// 第一个参数为可见行数 ,第二个参数为可见列数
t2 = new JTextArea(5 , 10 ) ;
t2.setEditable(false); //将文本区t2设置为不可编辑
add(t1);
add(t2);
//激活文档监听器
( t1.getDocument()).addDocumentListener(this);
setVisible(true); //设置为可见
validate(); //确保组件具有有效的布局
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
}
//重写接口方法
@Override //发出文档有更改的通知
public void changedUpdate(DocumentEvent e) {
// TODO Auto-generated method stub
String a = t1.getText(); ;
sum = 0 ; avg =0 ;
//除了123456789以外的字符和+ 为分隔符分离一个字符串。
String [] s = a.split("[^123456789+]");
for(int i = 0 ; i <s.length ;i++)
{
try{sum += Double.parseDouble(s[i]);}
catch( Exception ee ) {}
}
avg = sum / s.length ;
t2.setText(null);
t2.append("数值的和为"+sum); //append 是追加的意思
t2.append("\n数值的平均值为"+avg);
}
@Override
public void removeUpdate(DocumentEvent e) {
changedUpdate(e);
}
@Override
public void insertUpdate(DocumentEvent e) {
changedUpdate(e);
}
}
👨💻运行结果👍
你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!