最近发现一个CSDN大佬写的Java-Swing全部组件的介绍:Java Swing 图形界面开发(目录)

JTextArea

文本区域。JTextArea 用来编辑多行的文本。JTextArea 除了允许多行编辑外,其他基本用法和 JTextField(文本框) 基本一致。

文本框就一行,文本区域是一个多行区域。

JTextArea构造方法

/**
* 参数说明:
* text: 默认显示的文本
* rows: 默认可见的行数
* columns: 默认可见的列数
*
* 默认由 rows 和 columns 决定首选大小
*/
JTextArea() JTextArea(String text)
JTextArea(int rows, int columns)
JTextArea(String text, int rows, int columns)

JTextArea的一些函数

// 是否自动换行,默认为 false。自动换行也就是一行内可写字符是有限的,如果你超过这个数量不用你回车就会自动切到下一行
void setLineWrap(boolean wrap) // 设置自动换行方式。如果为 true,则将在单词边界(空白)处换行; 如果为 false,则将在字符边界处换行。默认为 false。
void setWrapStyleWord(boolean word) // 获取文本框中的文本
String getText() // 追加文本到文档末尾
void append(String str) // 替换部分文本
void replaceRange(String str, int start, int end) // 设置文本框的 文本、字体 和 字体颜色
void setText(String text)
void setFont(Font font)
void setForeground(Color fg) // 获取内容的行数(以换行符计算,满行自动换下一行不算增加行数)
int getLineCount() // 获取指定行(行数从0开始)的行尾(包括换行符)在全文中的偏移量
int getLineEndOffset(int line) // 获取指定偏移量所在的行数(行数从0开始)
int getLineOfOffset(int offset) // 设置颜色,分别为: 光标颜色、呈现选中部分的背景颜色、选中部分文本的颜色、不可用时文本的颜色
void setCaretColor(Color c)
void setSelectionColor(Color c)
void setSelectedTextColor(Color c)
void setDisabledTextColor(Color c) // 设置文本框是否可编辑
void setEditable(boolean b) /* 下面方法定义在 java.awt.Component 基类中 */ // 判断组件当前是否拥有焦点
boolean isFocusOwner() // 设置组件是否可用
void setEnabled(boolean b)

MouseEvent事件

处理在任何组件上都可以发生的按住、释放、移入组件、移出组件、单击触发的MouseEvent事件,应让监听器实现MouseListener接口。

如果要处理任何组件上都可以发生的拖动鼠标和移动鼠标时候触发的MouseEvent事件,应让监听器实现MouseMotionListener接口。

先用一个程序说MouseListener

MousePolice.java

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener; import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField; //作为MouseEvent事件的监听器,需要实现接口中的5个方法
public class MousePolice implements MouseListener{
JTextArea jta; //获取所需资源
public void setTextArea(JTextArea jta) {
this.jta=jta;
} //单击
@Override
public void mouseClicked(MouseEvent e) {
//多次单击即是连击
if(e.getClickCount()>=2)
jta.append("连击在:"+e.getX()+","+e.getY()+"\n");
} //进入
@Override
public void mouseEntered(MouseEvent e) {
//getSource直接获得事件源实例
if(e.getSource() instanceof JButton)
jta.append("进入按钮在:"+e.getX()+","+e.getY()+"\n");
if(e.getSource() instanceof JTextField)
jta.append("进入文本框在:"+e.getX()+","+e.getY()+"\n");
if(e.getSource() instanceof JFrame)
jta.append("进入窗口在:"+e.getX()+","+e.getY()+"\n");
} //退出
@Override
public void mouseExited(MouseEvent e) {
jta.append("退出在:"+e.getX()+","+e.getY()+"\n");
} //按下
@Override
public void mousePressed(MouseEvent e) {
jta.append("按下在:"+e.getX()+","+e.getY()+"\n");
} //松开
@Override
public void mouseReleased(MouseEvent e) {
jta.append("释放在:"+e.getX()+","+e.getY()+"\n");
}
}

WindowMouse.java

import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField; public class WindowMouse extends JFrame {
JTextField jtf;
JButton jb;
JTextArea jta;
MousePolice mp; WindowMouse() {
init();
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} private void init() {
// 当new FlowLayout()换成null时,就会变成绝对布局
// null,绝对布局。绝对布局没有特定一个布局管理器类来表示,给容器的布局管理器设置为 null,就表示使用绝对布局,
// 即通过设置组件的坐标和宽高来布置组件。
// 绝对布局需要明确指定每一个组件的坐标和宽高,否则不显示。
this.setLayout(new FlowLayout());
jtf = new JTextField(8); // 文本框。JTextField 用来编辑单行的文本。
jb = new JButton("按钮");
jta = new JTextArea(2, 28);
/*
* JTextArea(String text, int rows, int columns) 参数说明: text: 默认显示的文本 rows:
* 默认可见的行数 columns: 默认可见的列数 默认由 rows 和 columns 决定首选大小
*/
mp = new MousePolice(); mp.setTextArea(jta);// 为监听器传入资源 // 注册监听器
jb.addMouseListener(mp);
jta.addMouseListener(mp);
jtf.addMouseListener(mp);
this.addMouseListener(mp); this.add(jb);
this.add(jtf);
this.add(new JScrollPane(jta)); }
}

Main.java

// 设置自动换行,就是在输入的时候,如果输入内容超过一行所能容纳最多字符,就跳出
// textArea.setLineWrap(true); public class Main { public static void main(String[] args) {
WindowMouse wm=new WindowMouse();
wm.setTitle("处理MouseEvent事件");
wm.setBounds(300,300,360,200);
wm.setLocationRelativeTo(null); //自动把对话框弄到屏幕中间
} }

MouseMotionListener接口的例子

JLayeredPane(层次面板)

JLayeredPane为容器添加了深度,允许组件在需要时互相重叠。

JLayeredPane将深度范围按 层 划分,在同一层内又对组件按位置进一步划分,将组件放入容器时需要指定组件所在的层,以及组件在该层内的 位置(position/index)。

层的编号越大越显示在前面;同层内位置编号越大越靠近底部(位置编号取值范围: [-1, n - 1],n 表示层内组件数量,其中 -1 表示最底,0 表示最顶)。

通过 setLayer(Component c, int layer) 可设置组件所在的层数。

同一层内的组件,可通过调用 moveToFront(Component)、moveToBack(Component) 和 setPosition(int) 调整层内的位置。

PS: 添加到 JLayeredPane 内的组件需要明确指定组在位置和宽高,否则不显示(类似绝对布局)。

常用方法

/**
* 添加组件到指定的层(默认放到层内最底部),参数说明:
* comp: 待添加的组件
* layer: 所在的层, 层数是int类型, 由于该方法与另一个 add(Component, int) 方法类似, 直接使用会有冲突, 所以使
* 用该方法传递 layer 参数时, 必须使用 Integer 类型来明确调用的是下面 add(Component, Object) 方法。
*/
void add(Component comp, Object layer) // 添加组件到指定的层和层内的位置
void add(Component comp, Object layer, int position) // 设置组件所在层(默认放到层内最底部)
void setLayer(Component c, int layer) // 设置组件所在层,以及在层内的位置
void setLayer(Component c, int layer, int position) // 移动组件到其所在层的最顶部位置
void moveToFront(Component c) // 移动组件到其所在层的最底部位置
void moveToBack(Component c) // 设置组件在其所在层的位置,其中 position 取值范围为: [-1, n - 1],n 表示层内组件数量,其中 -1 表示最底,0 表示最顶
void setPosition(Component c, int position)

构造方法

JLayeredPane()

Swing的面板层次(参考链接:https://blog.csdn.net/kewbblog/article/details/8625917)

         |Grass Pane
|
Root Pane|
| |Content Pane
|Layered Pane|
|Menu Bar

Root Pane可以看成是虚拟的容器,包含着Grass Pane、Layered Pane、Content Pane与Menu Bar.Swing的容器包括JApplet ,JFrame,JDialog,JWindow与JInternalFrame都是构造在此结构上,JApplet、JFrame、JDialog、JWindow都是heavyweight容器,只 有JInternalFrame是lightweight容器。当我们要加入某个组件到Swing的容器中时,并不是直接加入到Root Pane,而是加入到 RootPane下面的某一成员(Layered Pane或Content Pane)

Content Pane与Menu Bar只是Layered Pane的其中一层,我们称此层为Frame-Content Layer.若你想知道Frame-Content Layer 在Layered Pane的层次是什么?你可以由JLayeredPane类中的Frame_Content_layer类常数取得。

由此我们可以知道,Layered Pane基本上可拥有非常多的“层”(Layer),那么如何分辨哪一层是在哪一层的上面或下面呢? 答案是Z_order.Z_order本身具有两个整数值,一个是代表层(Layer)的深度,另一个代表同层的相关位置(Position),当Z_order 的Layer数值越小时,表示其位置就在越底层,当Z_order的Layer数值越大时,表示其位置就在越上层。在JLayeredPane类中,共定 义了6个Z_order常数供用户参考,如下所示:

DEFAULT_LAYER:Z_order的Layer数值为0,以整数对象Integer(0)来表示,一般我们加入的组件若没有标记是第几层,默认值就 把组件放在此Default Layer中。

PALETTE_LAYER:Z_order的Layer数值为100,以整数对象Integer(100)来表示,位于Default Layer之上,一般用于放置可移动的 工具栏(Floatable Toolbar).

MODAL_LAYER:Z_order的Layer数值为200,以整数对象Integer(200)来表示,位于PALETTE_LAYER之上,一般用于放置对话框 (Dialog Box).

POPUP_LAYER:Z_order的Layer数值为300,以整数对象Integer(300)来表示,位于MODAL_LAYER之上,一般用于快捷菜单(Poup Menu)与工具栏提示(Tool Tips)中.

DRAG_LAYER:Z_order的Layer数值为400,以整数对象Integer(400)来表示,位于POPUP_LAYER之上,一般用于拖曳组件使其在不同 区域上.

FRAME_CONTENT_LAYER:Z_order的Layer数值为-30000,以整数对象Integer(-30000)来表示,一般来说,Frame Content Layer 最底层的是Layer,用来表示Content Pane与Menu Bar的位置,大部份情况我们不会更改到这个数值。

一般程序会提供良好的Z-order自动管理机制,当然java也不例外,因此大部份情况我们不会使用到Z-order,因为系统会自动 帮我们管理得好好的。用户只需将所需的组件直接加入Content Pane即可,不需要知道它们之间的顺序关系。但如果今天您必须处 理对象之间的层次关系时,例如Word中你可以把某个绘图对象下推至下一层,你就必须亲自处理Z-order的关系了。

下面用代码展示MouseMotionListener接口的例子

MousePolice.java

import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener; import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JLayeredPane; //中间容器层次面板,直接实现了监听器该实现的接口
//所以其中的组件按钮直接拿自己这个类做监听器就可以了
//这也是比较方便的编程方式
public class MousePolice extends JLayeredPane
implements MouseListener,MouseMotionListener{ JButton jb;
int x,y,a,b,x0,y0; MousePolice(){
jb=new JButton("被拖动的按钮");
jb.addMouseListener(this);
jb.addMouseMotionListener(this);
//setLayout设置布局管理器的布局为流式布局
this.setLayout(new FlowLayout());
//把按钮添加进来
this.add(jb, JLayeredPane.DEFAULT_LAYER);
} //MouseListener:按下
@Override
public void mousePressed(MouseEvent e) {
//除顶层容器外所有Swing组件的基类
JComponent jc=null;
jc=(JComponent)e.getSource();//获得事件源,并向上转换 //使用setLayer方法把组件设置在层次面板中的哪一层中出现
//但是程序并没 有把该组件添加到该层中
//在使用setLayer方法后还应使用add方法把组件添加进层面板的这一层中
//而且add方法 应出现在setLayer方法之后
//层级面板,设置出现层级。更多内置层级变量见:
//https://blog.csdn.net/kewbblog/article/details/8625917
this.setLayer(jc, JLayeredPane.DRAG_LAYER); //获取事件源(左上角)位置坐标
a=jc.getBounds().x;
b=jc.getBounds().y;
//获取鼠标在事件源中的位置坐标
//这里的x0,y0也就是按下时候的坐标
x0=e.getX();
y0=e.getY();
} //MouseListener:释放
@Override
public void mouseReleased(MouseEvent e) {
JComponent jc=null;
jc=(JComponent)e.getSource();
//拖拽完成后,放回原来那一层去 default_layer
this.setLayer(jc, JLayeredPane.DEFAULT_LAYER);
} //MouseListener:进入
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub } //MouseListener:单击
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub } //MouseListener:退出
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub } //MouseMotionListener:移动
@Override
public void mouseMoved(MouseEvent e) {
// TODO Auto-generated method stub } //MouseMotionListener:拖动
@Override
public void mouseDragged(MouseEvent e) {
Component cpnt=null;//最大的组件类
//如果事件源是组件,也不管是什么组件
if(e.getSource() instanceof Component) {
cpnt=(Component)e.getSource();//先向上转换成组件类对象
//组件(左上角)坐标
a=cpnt.getBounds().x;
b=cpnt.getBounds().y;
//拖动的实时坐标x,y
x=e.getX();
/*
* Java中的mouseReleased(MouseEvent e)中坐标(e.getX(),e.getY())
* 确定的是Pressed的时候的坐标
* */
y=e.getY();
//拖动的坐标影响组件的坐标,则看起来是动态的拖动
a=a+x;
b=b+y;
//设置其新位置
//也就是说,新的位置坐标=刚才位置坐标+(当前鼠标坐标-鼠标按下坐标)
//注意!组件的坐标是在容器坐标系中的!
//而鼠标的坐标是在其下的组件的坐标系中的!
cpnt.setLocation(a-x0,b-y0);
}
}
}

WindowMouse.java

import java.awt.BorderLayout;

import javax.swing.JFrame;

public class WindowMouse extends JFrame{
//往组件里装好监听器的层次面板
MousePolice lp; WindowMouse() {
lp=new MousePolice();
this.add(lp,BorderLayout.CENTER);//方位布局的中央
this.setVisible(true);
this.setBounds(12,12,300,300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

main.java

public class Main {

    public static void main(String[] args) {
WindowMouse wm=new WindowMouse();
wm.setTitle("处理MouseEvent事件");
wm.setBounds(10,10,400,300);
} }

setLayout函数作用:设置布局管理器的布局为什么布局

Java中的mouseReleased(MouseEvent e)中坐标(e.getX(),e.getY())确定的是Pressed的时候的坐标(如果你一直按着鼠标移动,那么这个值就会跟着改变)

java.awt.event.MouseEvent鼠标事件的定义和使用 以及 Java Swing-JTextArea的使用的更多相关文章

  1. 7.JAVA之GUI编程鼠标事件

    鼠标事件: 功能: 1.基本窗体功能实现 2.鼠标移动监听,当鼠标移动到按钮上时,触发打印事件. 3.按钮活动监听,当按钮活动时,触发打印事件. 4.按钮被单击时触发打印事件. 源码如下: impor ...

  2. 常用MouseEvent鼠标事件对象&KeyboardEvent键盘事件对象&常用键盘码

    MouseEvent鼠标事件对象: e.target //=> 事件源(操作的是哪个元素) e.clientX e.clientY //当前鼠标触发点距离当前窗口左上角的X|Y轴坐标 e.pag ...

  3. java图形化界面-------鼠标监听画圆----------使用匿名类

    package com.aa; import java.awt.Color; import java.awt.Graphics; import java.awt.event.MouseAdapter; ...

  4. Java基础--Java---IO流------GUI(布局)、Frame、事件监听机制、窗体事件、Action事件、鼠标事件、对话框Dialog、键盘事件、菜单

     * 创建图形化界面  * 1.创建frame窗体  * 2.对窗体进行基本设置  *   比如大小.位置.布局  * 3.定义组件  * 4.将组件通过窗体的add方法添加到窗体  * 5.让窗体显 ...

  5. 事件监听机制——鼠标事件MouseEvent

    鼠标事件 鼠标事件包括鼠标的双击.左击.右击.中间键等等,本文进行事件加载进行简单介绍,具体可以参考键盘事件. import java.awt.*; import java.awt.event.*; ...

  6. java中绘图-----那个鼠标等的监听我还是不太会,,好苦恼啊。不知道这些监听事件是怎么区分的

    总结::监听到底该怎么用 事件的区分是靠判断还是 package com.a.b; //我想实现,当我点击一个按钮时,这个frame里可以画出实心的矩形 import java.awt.Color; ...

  7. Java Swing界面编程(25)---事件处理:鼠标事件及监听处理

    假设想对一个鼠标的操作进行监听,假设鼠标按下.松开等.则能够使用MouseListener接口. package com.beyole.util; import java.awt.event.Mous ...

  8. Java GUI 鼠标事件

    import java.awt.Button; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.event.Mou ...

  9. learning java AWT widowEvent and MouseEvent

    import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import jav ...

随机推荐

  1. Eclipse-Che 安装(Centos)

    安装docker,然后执行:docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock -v /home/cheData:/dat ...

  2. 【Maven】Maven 高级应用

    Maven 高级应用 Maven 基础 Maven 是一个项目管理工具,它有如下好处: 节省磁盘空间 可以一键构建 可以跨平台使用 依赖传递和管理,提高开发效率 一键构建:Maven 自身集成了 To ...

  3. python学习笔记 | 国内常用源镜像地址

    各镜像列表 清华:https://pypi.tuna.tsinghua.edu.cn/simple 阿里云:http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 ...

  4. Rabbitmq可靠消息投递,消息确认机制

    前言 我们知道,消息从发送到签收的整个过程是 Producer-->Broker/Exchange-->Broker/Queue-->Consumer,因此如果只是要保证消息的可靠投 ...

  5. 【RAC】oracle11g r2 rac环境删除节点步骤

    1.移除数据库实例 如果节点运行了service首先需要删除service使用dbca图形化界面删除节点依次选择 Real Application Clusters -- > Instance ...

  6. AWD生存之道

    比赛开始阶段 常见漏洞的防御手段:https://www.freebuf.com/articles/web/208778.html 一.登陆SSH 重点 如果ssh的密码不是随机密码,记得一开始就进行 ...

  7. 【一天一个知识点系列】- Redis Cluser之数据分布

    数据分布 简述 分布式数据库首先要解决把整个数据集按照分区规则映射到多个节点的问题,即把数据集划分到多个节点上,每个节点负责整体数据的一个子集 分区及限制 分区规则 常见的分区规则 顺序分区 哈希分区 ...

  8. 20.java设计模式之解释器模式

    基本需求 实现四则运算,如计算a+b-c+d的值 先输入表达式的形式,如a+b-c+d,要求表达式正确 再分别输出a,b,c,d的值 最后求出结果 传统方案 编写一个方法,接收表达式的形式,根据用户输 ...

  9. HTML5表格详细教程

    HTML5表格 文章目录 HTML5表格 5.1 定义表格 5.1.1 普通表格.列标题 5.1.2 表格标题 5.1.3 表格行分组.表格列分组 5.2 表格属性 5.2.1 单线表格.分离单元格 ...

  10. 使用存储过程在mysql中批量插入数据

    一.在mysql数据库中创建一张表test DROP TABLE IF EXISTS `test`; CREATE TABLE `test` ( `id` INT (11), `name` VARCH ...