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在某些情况下挂起。
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()方法。(必须为这两个维度添加每个子组件。)
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()返回图标的图像。
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基础 | 简单使用Jframe创建一个窗体实例的主要内容,如果未能解决你的问题,请参考以下文章