JFrame

2018-01-09 19:23 更新

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()方法使窗口不可见,并将资源释放到操作系统。

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号