JFrame
Java Swing教程 - JFrame
让我们从最简单的Swing程序开始。
我们将使用JFrame(它是一个顶层容器)来创建我们的第一个应用程序。要创建和显示JFrame,我们需要执行以下操作:
- Create a JFrame object.
- Make it visible.
要创建JFrame对象,我们可以使用JFrame类的构造函数。
在下面的代码中,我们使用接受字符串的构造函数。字符串值将显示为JFrame的标题。
表示Swing组件的类位于javax.swing包中,所以是JFrame类。
以下代码创建一个JFrame对象,其标题设置为“Swing":
// Create a JFrame object
JFrame frame = new JFrame("Swing");
显示JFrame
当我们创建一个JFrame对象,默认情况下,它是不可见的。我们必须调用它的 setVisible(boolean visible)方法使其可见。true参数使框架可见,隐藏框架通过false到setVisible方法。
使JFrame在屏幕上可见
frame.setVisible(true);
以下代码将两个语句封装为一个语句,以创建和显示JFrame。
new JFrame("Swing").setVisible(true);
import javax.swing.JFrame;
/*from w ww . jav a2 s . c o m*/
public class Main {
public static void main(String[] args) {
// Create a frame
JFrame frame = new JFrame("Swing");
// Display the frame
frame.setVisible(true);
}
}
退出Swing应用程序
我们可以定义JFrame的四个行为之一确定当JFrame关闭时会发生什么。
常量在javax.swing.WindowsConstants接口中定义。
JFrame类实现了WindowsConstants接口。我们可以使用JFrame.CONSTANT_NAME语法或引用所有这些常量我们可以使用WindowsConstants.CONSTANT_NAME语法。
四个常数是
-
DO_NOTHING_ON_CLOSE
do not do anything when the user closes a JFrame. -
HIDE_ON_CLOSE
hides a JFrame when the user closes it. This is the default behavior. The JFrame is invisible but the program is still running. -
DISPOSE_ON_CLOSE
hides and disposes of the JFrame when the user closes it. Disposing a JFrame releases any resources used by it. -
EXIT_ON_CLOSE
exits the application. This option will exit the application.
我们可以通过将四个常量之一传递给它来设置JFrame的默认关闭行为setDefaultCloseOperation()方法。
以下代码显示了当JFrame关闭时如何退出应用程序
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
上面的JFrame没有可视区域。它只显示标题栏。
JFrame大小
我们需要设置JFrame的大小和位置以显示其内容区域。
帧的大小由其宽度和高度(以像素为单位)定义我们可以使用setSize(int width,int height)方法设置它们。
该位置由相对于屏幕左上角的JFrame左上角的(x,y)坐标以像素为单位定义。
默认情况下,它的位置设置为(0,0),这是JFrame显示的原因在屏幕的左上角。
我们可以使用其 setLocation(int x,int y)方法设置JFrame的(x,y)坐标。
要在一个步骤中设置其大小和位置,请使用其setBounds(int x,int y,int width,int height)方法。
下面的代码给出了JFrame的大小和位置。
import javax.swing.JFrame;
/* ww w . ja v a2s . c o m*/
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame("Swing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Set the x, y, width and height properties
frame.setBounds(50, 50, 200, 200);
frame.setVisible(true);
}
}
将组件添加到JFrame
要将JFrame放在屏幕中央,使用null参数调用其setLocationRelativeTo()方法。
当向JFrame添加UI控件时,我们将它们添加到JFrame的内容窗格。
JFrame的内容窗格保存JFrame的Swing组件。
要从JFrame获取内容窗格的引用,请使用以下代码。
// Create a JFrame
JFrame frame = new JFrame("Test");
// Get the reference of the content pane
Container contentPane = frame.getContentPane();
从JFrame获取内容窗格的引用后,我们可以添加组件通过使用add()方法。
// Add aComponent to contentPane contentPane.add(aComponent);
下面的代码向JFrame添加了一个JButton。JButton类的一个对象表示一个按钮,例如消息框上的OK按钮。
JButton包含标签文本。 下一行使用关闭作为JButton的标签文本。
// Create a JButton with Close text
JButton closeButton = new JButton("Close");
要将closeButton添加到JFrame的内容窗格,我们必须做两件事情:
获取JFrame的内容窗格的引用。
Container contentPane = frame.getContentPane();
调用内容窗格的add()方法。
contentPane.add(closeButton);
要使用一行代码将JButton添加到JFrame,请将所有语句合并为一个语句。
frame.getContentPane().add(new JButton("Close"));
要使用一行代码将JButton添加到JFrame,请将所有语句合并为一个语句。...
import java.awt.Container;
//from ww w. j a va2 s .c o m
import javax.swing.JButton;
import javax.swing.JFrame;
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame("JFrame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = frame.getContentPane();
// Add a close button
JButton closeButton = new JButton("Close");
contentPane.add(closeButton);
// set the size of the frame 300 x 200
frame.setBounds(50, 50, 300, 200);
frame.setVisible(true);
}
}
包JFrame
JFrame的pack()方法检查JFrame上的所有组件,并决定它们的首选大小,并设置JFrame的大小刚好足以显示所有组件。
当我们调用pack()方法时,我们不需要设置JFrame的大小。pack()方法将计算JFrame的大小并设置它。
当使用pack()方法时,我们不需要调用setBounds()方法。
要在pack()方法后定位JFrame,请使用setLocation(x,y)方法。
import java.awt.Container;
// w ww . j a v a 2 s .co m
import javax.swing.JButton;
import javax.swing.JFrame;
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame("JFrame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Add a close button
JButton closeButton = new JButton("Close");
Container contentPane = frame.getContentPane();
contentPane.add(closeButton);
// Calculates and sets appropriate size for the frame
frame.pack();
frame.setVisible(true);
}
}
JFrame状态
我们可以使用编程方式设置JFrame的状态setExtendedState(int state)方法。
使用在继承JFrame类的java.awt.Frame类中定义的常量来指定状态。
使用在继承JFrame类的java.awt.Frame类中定义的常量来指定状态。...
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
下表列出了定义JFrame的状态的常量
| JFrame状态常量 | 描述 |
|---|---|
| NORMAL | JFrame以正常大小显示。 |
| ICONIFIED | JFrame显示为最小化状态。 |
| MAXIMIZED_HORIZ | JFrame显示为水平最大化,但垂直尺寸正常。 |
| MAXIMIZED_VERT | JFrame显示为水平最大化,但垂直尺寸正常。... |
| MAXIMIZED_BOTH | JFrame显示为水平和垂直最大化。 |
默认按钮
有时我们可能想在JFrame或JDialog中使用默认按钮。默认按钮是的一个实例JButton类,当用户按下键盘上的一个键时激活。
激活默认按钮的键由外观定义。
通常,激活默认按钮的键是Enter键。
我们可以为JRootPane设置一个默认按钮,它存在于JFrame,JDialog,JWindow,JApplet和JInternalFrame中。
通常,我们将OK按钮设置为JDialog上的默认按钮。如果JRootPane设置了默认按钮,按Enter键将激活该按钮。
// Create a JButton
JButton okButton = new JButton("OK");
// Set okButton as the default button
frame.getRootPane().setDefaultButton(okButton);
窗口事件
我们可以向JFrame或任何其他顶级Swing窗口添加一个窗口侦听器,以便通知窗口状态的更改。
下面的代码将一个窗口侦听器添加到一个名为frame的JFrame。
如果我们感兴趣的只是监听几个窗口状态的变化,我们可以使用WindowAdapter类而不是WindowListener接口。
WindowAdapter类提供了WindowListener接口中所有七个方法的空实现。
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.IOException;
//ww w . j a v a 2s. c o m
import javax.swing.JFrame;
public class Main {
public static void main(String[] args) throws IOException {
JFrame frame = new JFrame();
frame.addWindowListener(new WindowListener() {
@Override
public void windowOpened(WindowEvent e) {
System.out.println("JFrame has been made visible first time");
}
@Override
public void windowClosing(WindowEvent e) {
System.out.println("JFrame is closing.");
}
@Override
public void windowClosed(WindowEvent e) {
System.out.println("JFrame is closed.");
}
@Override
public void windowIconified(WindowEvent e) {
System.out.println("JFrame is minimized.");
}
@Override
public void windowDeiconified(WindowEvent e) {
System.out.println("JFrame is restored.");
}
@Override
public void windowActivated(WindowEvent e) {
System.out.println("JFrame is activated.");
}
@Override
public void windowDeactivated(WindowEvent e) {
System.out.println("JFrame is deactivated.");
}
});
// Use the WindowAdapter class to intercept only the window closing event
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.out.println("JFrame is closing.");
}
});
}
}
我们完成了一个窗口(JFrame,JDialog或JWindow),我们应该调用它的dispose()方法。
dispose()方法使窗口不可见,并将资源释放到操作系统。

免费 AI IDE


更多建议: