Swing JWindow類

2019-10-16 22:10:07

JWindow類是一個可以顯示但沒有標題列或視窗管理按鈕的容器。

類宣告

以下是javax.swing.JWindow類的宣告 -

public class JWindow
   extends Window
      implements Accessible, RootPaneContainer

欄位

以下是java.awt.Component類的欄位 -

  • protected AccessibleContext accessibleContext - 可存取的上下文屬性。
  • protected JRootPane rootPane - 管理此框架的contentPane和可選menuBar的JRootPane範例。
  • protected boolean rootPaneCheckingEnabled - 如果為true,則對addsetLayout的呼叫將轉發到contentPane

類建構函式

編號 類建構函式 描述
1 JWindow() 建立一個沒有指定所有者的視窗。
2 JWindow(Frame owner) 建立具有指定所有者框架的視窗。
3 JWindow(GraphicsConfiguration gc) 使用螢幕裝置的指定GraphicsConfiguration建立一個視窗。
4 JWindow(Window owner) 使用指定的所有者視窗建立一個視窗。
5 JWindow(Window owner, GraphicsConfiguration gc) 使用指定的所有者視窗和螢幕裝置的GraphicsConfiguration建立一個視窗。

類方法

編號 類方法 描述
1 protected void addImpl(Component comp, Object constraints, int index) 新增指定的子元件。
2 protected JRootPane createRootPane() 由建構函式方法呼叫以建立預設的rootPane
3 AccessibleContext getAccessibleContext() 獲取與此JWindow關聯的AccessibleContext。
4 Container getContentPane() 返回Container,它是此視窗的contentPane
5 Component getGlassPane() 返回此視窗的glassPane元件。
6 Graphics getGraphics() 為此元件建立圖形上下文。
7 JLayeredPane getLayeredPane() 返回此視窗的layeredPane物件。
8 JRootPane getRootPane() 返回此視窗的rootPane物件。
9 TransferHandler getTransferHandler() 獲取transferHandler屬性。
10 protected boolean isRootPaneCheckingEnabled() 返回對addsetLayout的呼叫是否轉發到contentPane
11 protected String paramString() 返回此JWindow的字串表示形式。
12 void remove(Component comp) 從容器中刪除指定的元件。
13 void repaint(long time, int x, int y, int width, int height) 在時間毫秒內重新繪製此元件的指定矩形。
14 void setContentPane(Container contentPane) 設定此視窗的contentPane屬性。
15 void setGlassPane(Component glassPane) 設定glassPane屬性。
16 void setLayeredPane(JLayeredPane layeredPane) 設定layeredPane屬性。
17 void setLayout(LayoutManager manager) 設定LayoutManager
18 protected void setRootPane(JRootPane root) 為此視窗設定新的rootPane物件。
19 protected void setRootPaneCheckingEnabled(boolean enabled) 設定是否將對addsetLayout的呼叫轉發到contentPane
20 void setTransferHandler(TransferHandler newHandler) 設定transferHandler屬性,該屬性是一種支援將資料傳輸到此元件的機制。
21 void update(Graphics g) 呼叫:paint(g)
22 protected void windowInit() 由建構函式呼叫以正確初始化JWindow

方法繼承

該類繼承以下類中的方法 -

  • java.awt.Window
  • java.awt.Container
  • java.awt.Component
  • java.lang.Object

JWindow範例

使用編輯器建立以下Java程式:JWindowDemo.java

package com.yiibai.menu;

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

public class JWindowDemo {
    private JFrame mainFrame;
    private JLabel headerLabel;
    private JLabel statusLabel;
    private JPanel controlPanel;
    private JLabel msglabel;

    public JWindowDemo() {
        prepareGUI();
    }

    public static void main(String[] args) {
        JWindowDemo swingContainerDemo = new JWindowDemo();
        swingContainerDemo.showJWindowDemo();
    }

    private void prepareGUI() {
        mainFrame = new JFrame("Java Swing JWindowDemo(tw511.com)");
        mainFrame.setSize(400, 400);
        mainFrame.setLayout(new GridLayout(3, 1));

        mainFrame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent windowEvent) {
                System.exit(0);
            }
        });
        headerLabel = new JLabel("", JLabel.CENTER);
        statusLabel = new JLabel("", JLabel.CENTER);
        statusLabel.setSize(350, 100);

        msglabel = new JLabel("歡迎您來到易百教學~", JLabel.CENTER);

        controlPanel = new JPanel();
        controlPanel.setLayout(new FlowLayout());

        mainFrame.add(headerLabel);
        mainFrame.add(controlPanel);
        mainFrame.add(statusLabel);
        mainFrame.setVisible(true);
    }

    private void showJWindowDemo() {
        headerLabel.setText("Container in action: JWindow");
        final MessageWindow window = new MessageWindow(mainFrame, "歡迎您來到易百教學/Swing~");

        JButton okButton = new JButton("開啟一個視窗");
        okButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                window.setVisible(true);
                statusLabel.setText("A Window shown to the user.");
            }
        });
        controlPanel.add(okButton);
        mainFrame.setVisible(true);
    }

    class MessageWindow extends JWindow {
        private String message;

        public MessageWindow(JFrame parent, String message) {
            super(parent);
            this.message = message;
            setSize(300, 300);
            setLocationRelativeTo(parent);
        }

        public void paint(Graphics g) {
            super.paint(g);
            g.drawRect(0, 0, getSize().width - 1, getSize().height - 1);
            g.drawString(message, 50, 150);
        }
    }
}

執行上面範例程式碼,得到以下結果:

JWindow示例

開啟新的視窗如下:

JWindow