當前位置 主頁 > 網站技術 > 代碼類 > 最大化 縮小

    Java Swing JFrame窗口的實現

    欄目:代碼類 時間:2019-12-31 18:06

    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);
     }
    
    }
    
青海十一选五开奖数据