1. 程式人生 > 程式設計 >Java Swing JFrame視窗的實現

Java Swing JFrame視窗的實現

1. 概述

官方JavaDocsApi: javax.swing.JFrame

JFrame,視窗。JFrame 是一個可以獨立顯示的元件,一個視窗通常包含有標題、圖示、操作按鈕(關閉、最小化、最大化),還可以為視窗新增選單欄、工具欄等。一個程序中可以建立多個視窗,並可在適當時候進行顯示、隱藏 或 銷燬。

JFrame 常用構造方法:

/**
 * 引數說明:
 *  title: 視窗標題
 */
JFrame()

JFrame(String title)

JFrame 常用方法:

// 設定視窗的 標題
void setTitle(String title)

// 設定視窗的 圖示
void setIconImage(Image image)

// 設定視窗的 寬高
void setSize(int width,int height)
void setSize(Dimension d)

/**
 * 設定視窗關閉按鈕點選後的預設操作,參考值:
 *  WindowConstants.DO_NOTHING_ON_CLOSE: 不執行任何操作。
 *  WindowConstants.HIDE_ON_CLOSE: 隱藏視窗(不會結束程序),再次呼叫 setVisible(true) 將再次顯示。
 *  WindowConstants.DISPOSE_ON_CLOSE: 銷燬視窗,如果所有可顯示的視窗都被 DISPOSE,則可能會自動結束程序。
 *  WindowConstants.EXIT_ON_CLOSE: 退出程序。
 */
void setDefaultCloseOperation(int operation)

// 設定視窗是否可放大縮小
void setResizable(boolean resizable)

// 設定視窗的 位置(相對於螢幕左上角)
void setLocation(int x,int y)
void setLocation(Point p)

// 設定視窗的 位置 和 寬高
void setBounds(int x,int y,int width,int height)
void setBounds(Rectangle rect)

// 獲取視窗的位置座標(相對於螢幕座標空間)
Point getLocationOnScreen()
// 獲取視窗的位置座標(相對於父級座標空間,視窗的父級一般就是螢幕)
Point getLocation()

/**
 * 設定視窗的相對位置。
 * 如果 comp 整個顯示區域在螢幕內,則將視窗放置到 comp 的中心;
 * 如果 comp 顯示區域有部分不在螢幕內,則將該視窗放置在最接近 comp 中心的一側;
 * comp 為 null,表示將視窗放置到螢幕中心。
 */
void setLocationRelativeTo(Component comp)

// 設定將視窗 置頂 顯示
void setAlwaysOnTop(boolean alwaysOnTop)

// 設定視窗的內容面板
void setContentPane(Container contentPane)

// 設定視窗是否可見,視窗物件剛建立和新增相應元件後通過 setVisible(true) 繪製視窗,其內部元件可能要此時才有寬高值
void setVisible(boolean b)

// 判斷視窗是否處於顯示狀態
boolean isShowing()

// 銷燬視窗,釋放視窗及其所有子元件佔用的資源,之後再次呼叫 setVisible(true) 將會重構視窗
void dispose()

// 調整視窗的大小,以適合其子元件的首選大小和佈局。
void pack()

2. 程式碼例項

package com.xiets.swing;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Main {

 public static void main(String[] args) {
  final JFrame jf = new JFrame("測試視窗");
  jf.setSize(400,400);
  jf.setLocationRelativeTo(null);
  jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

  JPanel panel = new JPanel();

  JButton btn = new JButton("Show New Window");
  btn.addActionListener(new ActionListener() {
   @Override
   public void actionPerformed(ActionEvent e) {
    // 點選按鈕,顯示新的一個視窗
    showNewWindow(jf);
   }
  });
  panel.add(btn);

  jf.setContentPane(panel);
  jf.setVisible(true);
 }

 public static void showNewWindow(JFrame relativeWindow) {
  // 建立一個新視窗
  JFrame newJFrame = new JFrame("新的視窗");

  newJFrame.setSize(250,250);

  // 把新視窗的位置設定到 relativeWindow 視窗的中心
  newJFrame.setLocationRelativeTo(relativeWindow);

  // 點選視窗關閉按鈕,執行銷燬視窗操作(如果設定為 EXIT_ON_CLOSE,則點選新視窗關閉按鈕後,整個程序將結束)
  newJFrame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

  // 視窗設定為不可改變大小
  newJFrame.setResizable(false);

  JPanel panel = new JPanel(new GridLayout(1,1));

  // 在新視窗中顯示一個標籤
  JLabel label = new JLabel("這是一個視窗");
  label.setFont(new Font(null,Font.PLAIN,25));
  label.setHorizontalAlignment(SwingConstants.CENTER);
  label.setVerticalAlignment(SwingConstants.CENTER);
  panel.add(label);

  newJFrame.setContentPane(panel);
  newJFrame.setVisible(true);
 }

}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。