JFrame,JPanel,JLabel详解

article/2025/9/12 8:50:28

JFrame是一个顶层的框架类,好比一个窗户的框子。也是一个容器类。这个框子可以嵌入几个玻璃窗。

 

JPanel是一个容器类,相当于一大玻璃窗。

 

JLabel等是一些基础组件,它必须置于某个容器里,类似于窗花、剪纸,必须置于窗户的表面。

 

JFrame自带了一个玻璃窗。可以通过语句 Container c=getContentPane();  获得该内容窗格。

也可以定制一个新的玻璃面板替换原来的自带的玻璃窗,代码如下:

JPanel jp=new JPanel();

this.setContentPane(jp);

JFrame

java的GUI程序的基本思路是以JFrame为基础,它是屏幕上window的对象,能够最大化、最小化、关闭。

Swing 的三个基本构造块:标签、按钮和文本字段;但是需要个地方安放它们,并希望用户知道如何处理它们。JFrame 类就是解决这个问题的——它是一个容器,允许程序员把其他组件添加到它里面,把它们组织起来,并把它们呈现给用户。 JFrame 实际上不仅仅让程序员把组件放入其中并呈现给用户。比起它表面上的简单性,它实际上是 Swing 包中最复杂的组件。为了最大程度地简化组件,在独立于操作系统的 Swing 组件与实际运行这些组件的操作系统之间,JFrame 起着桥梁的作用。JFrame 在本机操作系统中是以窗口的形式注册的,这么做之后,就可以得到许多熟悉的操作系统窗口的特性:最小化/最大化、改变大小、移动。

构造方法

JFrame()
构造一个初始时不可见的新窗体。
JFrame(GraphicsConfiguration gc)
以屏幕设备的指定 GraphicsConfiguration 和空白标题创建一个 Frame。
JFrame(String title)
创建一个新的、初始不可见的、具有指定标题的 Frame。
JFrame(String title, GraphicsConfiguration gc)
创建一个具有指定标题和指定屏幕设备的 GraphicsConfiguration 的 JFrame。

常用方法

protected void
addImpl( Component comp,  Object constraints, int index)
添加指定的子 Component。
protected JRootPane
createRootPane()
由构造方法调用,以创建默认的 rootPane。
protected void
frameInit()
由构造方法调用,以适当地初始化 JFrame。
AccessibleContext
getAccessibleContext()
获得与此 JFrame 关联的 AccessibleContext。
Container
getContentPane()
返回此窗体的 contentPane 对象
int
getDefaultCloseOperation()
返回用户在此窗体上发起 "close" 时执行的操作。
Component
getGlassPane()
返回此窗体的 glassPane 对象。
Graphics
getGraphics()
为组件创建一个图形上下文。
JMenuBar
getJMenuBar()
返回此窗体上设置的菜单栏。
JLayeredPane
getLayeredPane()
返回此窗体的 layeredPane 对象。
JRootPane
getRootPane()
返回此窗体的 rootPane 对象。
TransferHandler
getTransferHandler()
获取 transferHandler 属性。
static boolean
isDefaultLookAndFeelDecorated()
如果新创建的 JFrame 应该由当前外观为其提供 Window 装饰,则返回 true。
protected boolean
isRootPaneCheckingEnabled()
返回是否将对 add 和 setLayout 的调用转发到 contentPane。
protected String
paramString()
返回此 JFrame 的字符串表示形式。
protected void
processWindowEvent(WindowEvent e)
处理此组件上发生的窗口事件。
void
remove( Component comp)
从该容器中移除指定组件。
void
repaint(long time, int x, int y, int width, int height)
在 time 毫秒内重绘此组件的指定矩形区域。
void
setContentPane( Container contentPane)
设置 contentPane 属性。
void
setDefaultCloseOperation(int operation)
设置用户在此窗体上发起 "close" 时默认执行的操作。
static void
setDefaultLookAndFeelDecorated(boolean defaultLookAndFeelDecorated)
提供一个关于新创建的 JFrame 是否应该具有当前外观为其提供的 Window 装饰(如边框、关闭窗口的小部件、标题等等)的提示。
void
setGlassPane( Component glassPane)
设置 glassPane 属性。
void
setIconImage( Image image)
设置要作为此窗口图标显示的图像。
void
setJMenuBar(JMenuBar menubar)
设置此窗体的菜单栏。
void
setLayeredPane(JLayeredPane layeredPane)
设置 layeredPane 属性。
void
setLayout(LayoutManager manager)
设置 LayoutManager。
protected void
setRootPane(JRootPane root)
设置 rootPane 属性。
protected void
setRootPaneCheckingEnabled(boolean enabled)
设置是否将对 add 和 setLayout 的调用转发到 contentPane。
void
setTransferHandler(TransferHandler newHandler)
设置 transferHandler 属性,该属性是支持向此组件传输数据的机制。
void
update( Graphics g)
只是调用 paint(g)。

JPanel

用途

组件是构成应用程序界面的基本元素,按钮、文本框、进度条等,都是组件。可视化组件又可以分为容器组件和非容器组件,可以在JPanel中放置按钮、文本框等非容器组件,甚至可。以在JPanel中再放置若干个JPanel组件,顶层容器也是容器组件,每一个窗口应用程序中有且只能有一个顶层容器组件。

构造方法

 

创建

JPanel myPanel = new JPanel();

 

构造方法

JPanel()               创建具有双缓冲和流布局的新Jpanel

JPanel(Boolean isDoubleBuffered)    创建具有FlowLayout和指定缓冲策略的新Jpanel

JPanel(LayoutManager layout)       创建具有指定布局管理器的新缓冲Jpanel

JPanel(LayoutManager layout, boolean isDoubleBuffered)   创建具有指定布局管理器和缓冲策略的新Jpanel

 

 

常用方法

 

 

 

注意点

 

 

使用示例

(下列程序来自网上示例程序,JPanel是可以嵌入在JFrame中的)

 

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
class Test extends JFrame 

JPanel contPanel = new JPanel(); 
JPanel pane1 = new JPanel(); 
JPanel pane2 = new JPanel(); 
JButton next = new JButton("
下一个"); 
JButton pre = new JButton("
上一个"); 
public Test() 

setBounds(0,0,200,300); 
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

contPanel.add(pane1); 

pane1.add(next); 
pane2.add(pre); 
next.addActionListener(new ActionListener(){ 
public void actionPerformed(ActionEvent e) 

contPanel.remove(pane1); 
contPanel.add(pane2); 
contPanel.revalidate(); 
contPanel.repaint(); 

}); 
pre.addActionListener(new ActionListener(){ 
public void actionPerformed(ActionEvent e) 

contPanel.remove(pane2); 
contPanel.add(pane1); 
contPanel.revalidate(); 
contPanel.repaint(); 

}); 

setContentPane(contPanel); 
setVisible(true); 

public static void main(String [] args) 

new Test(); 

}

 



Jlabel

JLabel类中常用的方法


1.
public JLabel(String text, Icon icon, int horizontalAlignment)
构造器。Label标记元件配置在显示区的中央部位,钮面文字为text图标为icon,水平对齐方式为horizontalAlignment,其值可为 SwingConstants.LEFT、SwingConstants.CENTER及SwingConstants.RIGHT。
2.
public JLable(String text, int horizontalAlignment)
构造器。Label标记元件配置在显示区的中央部位,钮面文字为text,水平对齐方式为horizontalAlignment。
3.
public JLabel(String text)
构造器。Label标记元件配置在显示区的中央部分,钮面文字为text,左边对齐。
4.
public JLabel(Icon image, int horizontalAlignment)
构造器。Label标记元件配置在显示区的中央部位,钮面图标为icon,水平对齐方式为horizontalAlignment。
5.
public JLabel(Icon image)
构造器。Label标记元件配置在显示区的中央部位,钮面图标为icon,左边对齐。
6.
public JLabel()
构造器。Label标记元件配置在显示萄中央部位,左边对齐。
7.
public Icon getIcon()
返回图标Icon对象。
8.
public String getText()
返回钮面文字字符串。
9.
public void setIcon(Icon icon)
设置图标Icon对象为icon。
10.
public void  setText(String text)


GUI界面开发演示

/**

 * 功能:gui界面开发演示

 */


package com.test1;

import java.awt.*;

import javax.swing.*;

 

public class Swing_1 extends JFrame{

//定义按钮组件

JButton jb1 = null;

public static void main(String[] args) {

Swing_1 swing = new Swing_1();

}

//构造函数

public Swing_1(){

//JFrame是一个顶层容器

jb1 = new JButton("我是按钮");

//设置窗体的标题

this.setTitle("MyFirstSwing");

//设置大小,按像素

this.setSize(200,200);

//添加JButton组建

this.add(jb1);

//设置窗体位置

this.setLocation(400, 200);

//设置当关闭窗口时,保证jvm也退出

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//设置窗体可见性

this.setVisible(true);

}

}

/*

 * 边界布局管理器

 * BorderLayout演示

 * 1.继承JFrame

 * 2.定义你需要的各个组建

 * 3.创建组件

 * 4.添加组建

 * 5.对窗体设这

 * 6.显示窗体

 */

package com.test1;

 

import java.awt.BorderLayout;

 

import javax.swing.*;

import javax.swing.*;

 

public class Border extends JFrame{

JButton jb1,jb2,jb3,jb4,jb5;

public static void main(String[] args) {

Border border = new Border();

}

//构造函数

public Border(){

//创建组件

jb1 = new JButton("中");

jb2 = new JButton("北");

jb3 = new JButton("东");

jb4 = new JButton("南");

jb5 = new JButton("西");

//添加各个组件

//this.add(jb1)没有指定位置的话,会被覆盖

this.add(jb1, BorderLayout.CENTER);

this.add(jb2, BorderLayout.NORTH);

this.add(jb3, BorderLayout.EAST);

this.add(jb4, BorderLayout.SOUTH);

this.add(jb5, BorderLayout.WEST);

//设置窗体属性

this.setTitle("边界布局");

this.setSize(300,200);

this.setLocation(400,200);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);

}

}

 

/**

 * 功能:流式布局案例

 */

package com.test1;

 

import javax.swing.*;

 

import java.awt.*;

 

public class Flow extends JFrame{

 

//定义需要的组件

JButton jb1,jb2,jb3,jb4,jb5,jb6;

public static void main(String[] args) {

Flow flow = new Flow();

}

//构造函数

public Flow(){

//创建组件

jb1=new JButton("关羽");

jb2=new JButton("张飞");

jb3=new JButton("赵云");

jb4=new JButton("马超");

jb5=new JButton("黄忠");

jb6=new JButton("魏延");

//添加组件

this.add(jb1);

this.add(jb2);

this.add(jb3);

this.add(jb4);

this.add(jb5);

this.add(jb6);

//设置布局管理器

this.setLayout(new FlowLayout(FlowLayout.LEFT));

//this.setLayout(new FlowLayout(FlowLayout.TRAILING));

//this.setLayout(new FlowLayout(FlowLayout.RIGHT) );

//this.setLayout(new FlowLayout(FlowLayout.CENTER));

//this.setLayout(new FlowLayout(FlowLayout.L));

//设置窗体属性

this.setTitle("边界布局");

this.setSize(300,200);

this.setLocation(400,200);

//禁止用户改变窗体大小

this.setResizable(false);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//显示

this.setVisible(true);

}

}

 

/**

 * 功能:网格布局

 */

package com.test1;

import java.awt.*;

import javax.swing.*;

 

public class Grid extends JFrame{

 

//定义组件

int size = 9 ;

JButton jbs[] = new JButton[size];

public static void main(String[] args) {

//创建实例

Grid grid = new Grid();

}

public Grid(){

//创建组件

for(int i = 0 ; i<9 ; i++){

jbs[i] = new JButton (String.valueOf(i));

}

//设置网格布局(3,3)表示33

this.setLayout(new GridLayout(3,3,10,10));

//添加组件

for(int i = 0 ; i < 9 ; i++){

this.add(jbs[i]);

}

//设置窗体属性

this.setTitle("网格布局");

this.setSize(300,200);

this.setLocation(400,200);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//显示窗体

this.setVisible(true);

}

}

 

 



http://chatgpt.dhexx.cn/article/KANFFTDC.shtml

相关文章

Java图形界面之JFrame,JLabel,JButton

Java图形界面之JFrame&#xff0c;JLabel&#xff0c;JButton 前言 ​ Java第一卷​ 图形界面第一节 JFrame package Demo03;import javax.swing.*; import java.awt.*;public class JFrame01 {public static void main(String[] args) {JFrame f new JFrame("第一个Swi…

Java GUI编程4---标签组件JLabel

1. 认识JLabel JLabel组件表示的是一个标签&#xff0c;本身是用于显示信息的&#xff0c;一般情况下是不能直接更改器显示内容的。创建完的Label对象可以通过Container类中的add()方法&#xff0c;加入到容器中&#xff0c;JLabel类的常用方法和常量如下表所示。 序号常量描…

JLabel标签较为常见部分的使用方法

本篇文章将会教会大家如何使用JLabel 1添加JLabel //创建一个标签 JLabel jLabel new JLabel("Hi,我是标签"); //添加到面板 Jpanel1.add(jLabel); //将面板添加到窗口 jFrame.add(Jpanel1);2设置文本颜色 //设置文本颜色 jLabel.setForeground(Color.green);3设…

Java基础-JLable组件、文本框组件、JPanel轻量级容器、Swing事件处理三种方式、适配器

1、JLable标签组件 标签是一种可以包含文本和图片的非交互组件&#xff0c;其文本可以是单行文本&#xff0c;也可以是 HTML 文本。对于只包含文本的标签可以使用 JLabel 类&#xff0c;该类的主要构造方法有如下几种形式。 JLabel()&#xff1a;创建无图像并且标题为空字符串…

06.JavaSwing(基础组件——JLabel类)

软件界面是软件和用户之间的交流平台&#xff0c;而组件则是绘制软件界面的基本元素&#xff0c;是软件和用户之间的交流要素。 一、概述 JLabel组件用来显示文本和图像&#xff0c;可以只显示其一种&#xff0c;也可以同时显示。JLabel类提供了一些列用来设置标签的方法。 二…

从DTW到DILATE---时序预测损失函数总结

时间序列预测损失函数 时间序列预测是指通过分析历史数据来预测未来数据的变化趋势。时间序列预测在许多领域都有着广泛的应用&#xff0c;例如金融、气象、交通等。为了能够准确预测未来数据&#xff0c;时间序列预测中损失函数的选择非常关键。损失函数的选择直接影响模型的…

DTW算法——matlab实现(二)

DTW算法——Matlab实现 本文只是简单的介绍DTW算法的目的和实现。具体的DTW可以参考一下文献&#xff1a; 离散序列的一致性度量方法&#xff1a;动态时间规整&#xff08;DTW&#xff09; http://blog.csdn.net/liyuefeilong/article/details/45748399 动态时间归整/规整/弯曲…

【时间序列】DTW算法详解

作者 | 追光者 研究 | 机器学习与时间序列 出品 | AI蜗牛车 1.DTW 1.1 时序相似度 在时间序列数据中&#xff0c;一个常见的任务是比较两个序列的相似度&#xff0c;作为分类或聚类任务的基础。那么&#xff0c;时间序列的相似度应该如何计算呢&#xff1f; “ 经典的时间序列相…

学习dtw-python库内容 动态弯曲距离(DTW)具体实现

文章目录 一、install 数据包二、函数功能三、函数的参数以及含义四、具体实现 一、install 数据包 简单的pip install一下就好了&#xff0c;注意最后提示Successfully installed dtw-python-1.3.0 pip install dtw-python二、函数功能 执行 DTW 算法&#xff0c;并计算两个…

DTW距离

DTW&#xff08;dynamic-time-wraping&#xff09; 当两个时间序列等长时&#xff0c;我们可以使用欧氏距离来度量两者的相似性。但是当两个时间序列不等长时&#xff0c;欧氏距离就难以度量两者的相似性了。因此&#xff0c;国外学者提出了动态时间弯曲距离(Dynamic time war…

【时间序列】动态时间规整(DTW)算法简介(python)

简介 动态时间规整&#xff1a;(Dynamic Time Warping&#xff0c;DTW) 定义&#xff1a;用于比较不同长度的两个数组或时间序列之间的相似性或计算两者间的距离。 例1&#xff1a;a [1,2,3],b[3,2,2] 例2&#xff1a;a[1,2,3],b[2,2,2,3,4] 例1好计算&#xff0c;但对于例2&am…

【积】fast-DTW及其代码详解

fast-DTW 在解说中适合一个单特征的时间序列&#xff0c;在附录中修改了距离函数从而适合多个特征的时间序列。且距离函数用的是L1距离。如果是其他距离函数&#xff0c;修改即可。 1. DTW常用的加速手段 1.1 限制 亦即减少D的搜索空间&#xff0c;下图中阴影部分为实际的探…

DTW算法(语音识别)

DTW主要是应用在孤立词识别的算法&#xff0c;用来识别一些特定的指令比较好用&#xff0c;这个算法是基于DP&#xff08;动态规划&#xff09;的算法基础上发展而来的。这里介绍语音识别就先介绍下语音识别的框架&#xff0c;首先我们要有一个比对的模版声音&#xff0c;然后需…

时间序列匹配之dtw的python实现(一)

简介 Dynamic Time Warping&#xff08;动态时间序列扭曲匹配&#xff0c;简称DTW&#xff09;是时间序列分析的经典算法&#xff0c;用来比较两条时间序列之间的距离&#xff0c;发现最短路径。笔者在github上搜索dtw时发现了两个比较经典的库&#xff1a;dtw和dtw-python。d…

Python dtw(dynamic time warping)模块

dtw是一个用于计算动态时间扭曲距离的python模块。它可以作为时间序列之间的相似性度量。 dtw模块官方文档&#xff1a;https://www.cnpython.com/pypi/dtw DTW(dynamic time warping)的基本思想&#xff1a; 参考链接&#xff1a;https://zhuanlan.zhihu.com/p/117634492

时间序列相似性度量-DTW

1. 背景 最近项目中遇到求解时间序列相似性问题&#xff0c;这里序列也可以看成向量。在传统算法中&#xff0c;可以用余弦相似度和pearson相关系数来描述两个序列的相似度。但是时间序列比较特殊&#xff0c;可能存在两个问题&#xff1a; 两段时间序列长度不同。如何求相似…

算法笔记-DTW动态时间规整

算法笔记-DTW动态时间规整 简介简单的例子定义讨论 约束条件步模式标准化点与点的距离函数 具体应用场景 分类点到点匹配 算法笔记-DTW动态时间规整 动态时间规整/规划(Dynamic Time Warping, DTW)是一个比较老的算法&#xff0c;大概在1970年左右被提出来&#xff0c;最早用…

DTW学习笔记1.0

目录 DTW算法的目的&#xff1a; DTW算法实现&#xff1a; 以下图两段序列为例&#xff1a; DTW代码实现&#xff1a; Dynamic programming function 示例&#xff1a; 单变量示例&#xff1a; 比较序列相似性示例&#xff1a; 缺点&#xff1a; DTW算法的目的&#xf…

动态时间规整—DTW算法

简述 Dynamic Time Warping&#xff08;DTW&#xff09;诞生有一定的历史了&#xff08;日本学者Itakura提出&#xff09;&#xff0c;它出现的目的也比较单纯&#xff0c;是一种衡量两个长度不同的时间序列的相似度的方法。应用也比较广&#xff0c;主要是在模板匹配中&#…

语音信号处理之(一)动态时间规整(DTW)

语音信号处理之&#xff08;一&#xff09;动态时间规整&#xff08;DTW&#xff09; zouxy09qq.com http://blog.csdn.net/zouxy09 这学期有《语音信号处理》这门课&#xff0c;快考试了&#xff0c;所以也要了解了解相关的知识点。呵呵&#xff0c;平时没怎么听课&#xff…