Java基础 | 简单使用Jframe创建一个窗体实例

Posted Hdparm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础 | 简单使用Jframe创建一个窗体实例相关的知识,希望对你有一定的参考价值。

前言:在此次教程当中,我们将进入浅尝辄止GUI设计,我们将编写我们的第一个Swing程序。我们创建了第一个简单的应用程序,展示了如何用一个退出按钮终止一个应用程序,显示一个框架图标,显示一个工具提示,使用助记符,并显示标准颜色。

Java Swing组件是Java Swing应用程序的基本构建块。在本章中,我们将使用JFrame、JButton和JLabel组件。JFrame是一个带有标题和边框的顶级窗口。它用于组织其他组件,通常称为子组件。

JButton是一个用于执行操作的按钮。JLabel是一个组件,用于显示短文本字符串或图像,或同时显示两者。

1.Swing timer 设计使用方法

第一个示例在屏幕上显示了一个基本窗口。

package com.zetcode;

import java.awt.EventQueue;
import javax.swing.JFrame;

public class SimpleEx extends JFrame

public SimpleEx()

initUI();


private void initUI()

setTitle("Simple example");
setSize(300, 200);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);


public static void main(String[] args)

EventQueue.invokeLater(() ->

var ex = new SimpleEx();
ex.setVisible(true);
);

虽然这段代码非常短,但这段代码的应用程序窗口可以做很多事情。它可以被调整,最大化或最小化。它所带来的所有复杂性对应用程序程序员都是隐藏的。

import java.awt.EventQueue;
import javax.swing.JFrame;

首先,我们需要在这里,导入将在代码中需要的使用的Swing类,使用JFrame,EventQueue

其中SimpleEx继承自JFrame组件。JFrame是一个顶级容器。容器的基本用途是容纳应用程序的组件。

public SimpleEx() 

initUI();

这是一个很好的编程实践,不将应用程序代码放入构造函数中,而是将任务委托给特定的方法,

setTitle("Simple example");

这里我们使用setTitle()方法设置窗口的标题。

setSize(300, 200);

setSize()将窗口的大小调整为300像素宽和200像素高。

setLocationRelativeTo(null);

这条线使屏幕上的窗口居中。

setDefaultCloseOperation(EXIT_ON_CLOSE);

如果我们单击标题栏的Close按钮,这个setDefaultCloseOperation()将关闭窗口。默认情况下,单击按钮不会发生任何事情。

EventQueue.invokeLater(() -> 

var ex = new SimpleEx();
ex.setVisible(true);
);

我们创建代码示例的一个实例,并使其在屏幕上可见。invokeLater()方法将应用程序放置在Swing事件队列上。它用于确保所有UI更新都是并发安全的。换句话说,它是为了防止GUI在某些情况下挂起。

Java基础

2.合理使用JButton example

在下一个例子中,我们将有一个按钮。当我们单击按钮时,应用程序终止。

package com.zetcode;

import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import java.awt.EventQueue;

public class QuitButtonEx extends JFrame

public QuitButtonEx()

initUI();


private void initUI()

var quitButton = new JButton("Quit");

quitButton.addActionListener((event) -> System.exit(0));

createLayout(quitButton);

setTitle("Quit button");
setSize(300, 200);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);


private void createLayout(JComponent... arg)

var pane = getContentPane();
var gl = new GroupLayout(pane);
pane.setLayout(gl);

gl.setAutoCreateContainerGaps(true);

gl.setHorizontalGroup(gl.createSequentialGroup()
.addComponent(arg[0])
);

gl.setVerticalGroup(gl.createSequentialGroup()
.addComponent(arg[0])
);


public static void main(String[] args)

EventQueue.invokeLater(() ->

var ex = new QuitButtonEx();
ex.setVisible(true);
);

我们在窗口上放置一个JButton,并向该按钮添加一个操作监听器。

var quitButton = new JButton("Quit");

这里我们创建了一个按钮组件。这个构造函数接受一个字符串标签作为参数。

quitButton.addActionListener((event) -> System.exit(0));

我们为按钮插入一个动作监听器。该操作通过调用System.exit()方法终止应用程序。

createLayout(quitButton);

子组件需要放入容器中。我们将任务委托给createLayout()方法。

var pane = getContentPane();
var gl = new GroupLayout(pane);
pane.setLayout(gl);

JFrame的内容窗格是放置子组件的区域。子组件由称为布局管理器的专门的不可见组件组织。内容窗格的默认布局管理器是BorderLayout管理器。这个经理很简单。在本教程中,我们使用更强大和灵活的GroupLayout管理器。

gl.setAutoCreateContainerGaps(true);

setAutoCreateContainerGaps()方法在组件和容器边缘之间创建间隙。空间或间隙是每个应用程序设计的重要部分。

gl.setHorizontalGroup(gl.createSequentialGroup()
.addComponent(arg[0])
);

gl.setVerticalGroup(gl.createSequentialGroup()
.addComponent(arg[0])
);

GroupLayout管理器独立地定义每个维度的布局。在第一步中,我们沿着水平轴布置组件;在另一个步骤中,我们沿着纵轴布置组件。在这两种布局中,我们可以按顺序或并行排列组件。在水平布局中,组件的一行称为顺序组,组件的一列称为并行组。在垂直布局中,组件的一列称为顺序组,组件的一行称为并行组。

在我们的例子中,我们只有一个按钮,所以布局非常简单。对于每个维度,我们使用按钮组件作为参数调用addComponent()方法。(必须为这两个维度添加每个子组件。)

Java基础

3.正确添加JFrame icon

在下面的例子中,我们将在一个框架上显示一个图标。它显示在标题栏的左边。

package com.zetcode;

import java.awt.EventQueue;
import javax.swing.ImageIcon;
import javax.swing.JFrame;

public class FrameIconEx extends JFrame

public FrameIconEx()

initUI();


private void initUI()

var webIcon = new ImageIcon("src/resources/web.png");

setIconImage(webIcon.getImage());

setTitle("Icon");
setSize(300, 200);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);


public static void main(String[] args)

EventQueue.invokeLater(() ->

var ex = new FrameIconEx();
ex.setVisible(true);
);

ImageIcon用于创建图标。web.png是一个22x22像素的小图像文件。

var webIcon = new ImageIcon("src/resources/web.png");

我们从位于项目根目录中的PNG文件创建一个ImageIcon。

setIconImage(webIcon.getImage());

setIconImage()将图像设置为该窗口的图标。getImage()返回图标的图像。

Java基础

4.总结Java Swing tooltip

工具提示是内部应用程序帮助系统的一部分。如果我们将鼠标指针悬停在具有工具提示集的对象上,Swing会显示一个小窗口。

package com.zetcode;

import java.awt.EventQueue;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class TooltipEx extends JFrame

public TooltipEx()

initUI();


private void initUI()

var btn = new JButton("Button");
btn.setToolTipText("A button component");

createLayout(btn);

setTitle("Tooltip");
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);


private void createLayout(JComponent... arg)

var pane = (JPanel) getContentPane();
var gl = new GroupLayout(pane);
pane.setLayout(gl);

pane.setToolTipText("Content pane");

gl.setAutoCreateContainerGaps(true);

gl.setHorizontalGroup(gl.createSequentialGroup()
.addComponent(arg[0])
.addGap(200)
);

gl.setVerticalGroup(gl.createSequentialGroup()
.addComponent(arg[0])
.addGap(120)
);

pack();


public static void main(String[] args)

EventQueue.invokeLater(() ->

var ex = new TooltipEx();
ex.setVisible(true);
);

在本例中,我们为框架和按钮设置了工具提示。

btn.setToolTipText("A button component");

要启用工具提示,我们调用setTooltipText()方法

var pane = (JPanel) getContentPane();
var gl = new GroupLayout(pane);
pane.setLayout(gl);

内容窗格是JPanel组件的一个实例。getContentPane()方法返回一个Container类型。因为设置工具提示需要一个JComponent实例,所以我们将该对象转换为JPanel

pane.setToolTipText("Content pane");

为内容窗格设置了工具提示。

gl.setHorizontalGroup(gl.createSequentialGroup()
.addComponent(arg[0])
.addGap(200)
);

gl.setVerticalGroup(gl.createSequentialGroup()
.addComponent(arg[0])
.addGap(120)
);

对于水平和垂直维度,我们调用addGap()方法。它为按钮的右边和底部创造了一些空间。(目的是增加窗口的初始大小。)

pack();

pack()方法会根据组件的大小自动调整JFrame的大小。它还考虑到已定义的空间。我们的窗口将显示按钮和我们用addGap()方法设置的空格。

Java基础

后续可以增加内容和修改内容。

以上是关于Java基础 | 简单使用Jframe创建一个窗体实例的主要内容,如果未能解决你的问题,请参考以下文章

Java 碰壁小球游戏实例教程

java中怎样让一个JFrame窗体始终在最前端显示?

《Java Swing》第2节:窗体的创建

java的GUI程序的基本思路是以JFrame为基础

java 图形化界面笔记(1)

登录对话框(窗体程序)--JAVA基础