JFrame

2018-01-09 19:23 更新

Java Swing教程 - JFrame


讓我們從最簡單的Swing程序開始。

我們將使用JFrame(它是一個頂層容器)來創(chuàng)建我們的第一個應(yīng)用程序。要創(chuàng)建和顯示JFrame,我們需要執(zhí)行以下操作:

  • Create a JFrame object.
  • Make it visible.

要創(chuàng)建JFrame對象,我們可以使用JFrame類的構(gòu)造函數(shù)。

在下面的代碼中,我們使用接受字符串的構(gòu)造函數(shù)。字符串值將顯示為JFrame的標(biāo)題。

表示Swing組件的類位于javax.swing包中,所以是JFrame類。

以下代碼創(chuàng)建一個JFrame對象,其標(biāo)題設(shè)置為“Swing":

// Create a  JFrame  object
JFrame  frame  = new JFrame("Swing");


顯示JFrame

當(dāng)我們創(chuàng)建一個JFrame對象,默認(rèn)情況下,它是不可見的。我們必須調(diào)用它的 setVisible(boolean visible)方法使其可見。true參數(shù)使框架可見,隱藏框架通過false到setVisible方法。

使JFrame在屏幕上可見

frame.setVisible(true);

以下代碼將兩個語句封裝為一個語句,以創(chuàng)建和顯示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應(yīng)用程序

我們可以定義JFrame的四個行為之一確定當(dāng)JFrame關(guān)閉時會發(fā)生什么。

常量在javax.swing.WindowsConstants接口中定義。

JFrame類實現(xiàn)了WindowsConstants接口。我們可以使用JFrame.CONSTANT_NAME語法或引用所有這些常量我們可以使用WindowsConstants.CONSTANT_NAME語法。

四個常數(shù)是

  • 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.

我們可以通過將四個常量之一傳遞給它來設(shè)置JFrame的默認(rèn)關(guān)閉行為setDefaultCloseOperation()方法。

以下代碼顯示了當(dāng)JFrame關(guān)閉時如何退出應(yīng)用程序

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

上面的JFrame沒有可視區(qū)域。它只顯示標(biāo)題欄。

JFrame大小

我們需要設(shè)置JFrame的大小和位置以顯示其內(nèi)容區(qū)域。

幀的大小由其寬度和高度(以像素為單位)定義我們可以使用setSize(int width,int height)方法設(shè)置它們。

該位置由相對于屏幕左上角的JFrame左上角的(x,y)坐標(biāo)以像素為單位定義。

默認(rèn)情況下,它的位置設(shè)置為(0,0),這是JFrame顯示的原因在屏幕的左上角。

我們可以使用其 setLocation(int x,int y)方法設(shè)置JFrame的(x,y)坐標(biāo)。

要在一個步驟中設(shè)置其大小和位置,請使用其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參數(shù)調(diào)用其setLocationRelativeTo()方法。

當(dāng)向JFrame添加UI控件時,我們將它們添加到JFrame的內(nèi)容窗格。

JFrame的內(nèi)容窗格保存JFrame的Swing組件。

要從JFrame獲取內(nèi)容窗格的引用,請使用以下代碼。

// Create a  JFrame
JFrame  frame  = new JFrame("Test");

// Get the reference of  the   content  pane
Container contentPane = frame.getContentPane();

從JFrame獲取內(nèi)容窗格的引用后,我們可以添加組件通過使用add()方法。

// Add aComponent to contentPane 
contentPane.add(aComponent);

下面的代碼向JFrame添加了一個JButton。JButton類的一個對象表示一個按鈕,例如消息框上的OK按鈕。

JButton包含標(biāo)簽文本。 下一行使用關(guān)閉作為JButton的標(biāo)簽文本。

// Create a  JButton with  Close  text
JButton closeButton  = new JButton("Close");

要將closeButton添加到JFrame的內(nèi)容窗格,我們必須做兩件事情:

獲取JFrame的內(nèi)容窗格的引用。

Container contentPane = frame.getContentPane();

調(diào)用內(nèi)容窗格的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上的所有組件,并決定它們的首選大小,并設(shè)置JFrame的大小剛好足以顯示所有組件。

當(dāng)我們調(diào)用pack()方法時,我們不需要設(shè)置JFrame的大小。pack()方法將計算JFrame的大小并設(shè)置它。

當(dāng)使用pack()方法時,我們不需要調(diào)用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狀態(tài)

我們可以使用編程方式設(shè)置JFrame的狀態(tài)setExtendedState(int state)方法。

使用在繼承JFrame類的java.awt.Frame類中定義的常量來指定狀態(tài)。

使用在繼承JFrame類的java.awt.Frame類中定義的常量來指定狀態(tài)。...

frame.setExtendedState(JFrame.MAXIMIZED_BOTH);

下表列出了定義JFrame的狀態(tài)的常量

JFrame狀態(tài)常量 描述
NORMAL JFrame以正常大小顯示。
ICONIFIED JFrame顯示為最小化狀態(tài)。
MAXIMIZED_HORIZ JFrame顯示為水平最大化,但垂直尺寸正常。
MAXIMIZED_VERT JFrame顯示為水平最大化,但垂直尺寸正常。...
MAXIMIZED_BOTH JFrame顯示為水平和垂直最大化。

默認(rèn)按鈕

有時我們可能想在JFrame或JDialog中使用默認(rèn)按鈕。默認(rèn)按鈕是的一個實例JButton類,當(dāng)用戶按下鍵盤上的一個鍵時激活。

激活默認(rèn)按鈕的鍵由外觀定義。

通常,激活默認(rèn)按鈕的鍵是Enter鍵。

我們可以為JRootPane設(shè)置一個默認(rèn)按鈕,它存在于JFrame,JDialog,JWindow,JApplet和JInternalFrame中。

通常,我們將OK按鈕設(shè)置為JDialog上的默認(rèn)按鈕。如果JRootPane設(shè)置了默認(rèn)按鈕,按Enter鍵將激活該按鈕。

// Create a  JButton
JButton okButton   = new JButton("OK");
// Set  okButton   as  the   default  button 
frame.getRootPane().setDefaultButton(okButton);

窗口事件

我們可以向JFrame或任何其他頂級Swing窗口添加一個窗口偵聽器,以便通知窗口狀態(tài)的更改。

下面的代碼將一個窗口偵聽器添加到一個名為frame的JFrame。

如果我們感興趣的只是監(jiān)聽幾個窗口狀態(tài)的變化,我們可以使用WindowAdapter類而不是WindowListener接口。

WindowAdapter類提供了WindowListener接口中所有七個方法的空實現(xiàn)。

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),我們應(yīng)該調(diào)用它的dispose()方法。

dispose()方法使窗口不可見,并將資源釋放到操作系統(tǒng)。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號