首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java Swing自定義對話框實戰:繼承JDialog實現關於對話框

     編輯:Java 程式設計入門

繼承JDialog實現模態對話框

Swing編程中可通過繼承JDialog自定義對話框。下面給出一個完整的「關於本程序」對話框實現,包含圖片展示、作者信息、系統屬性顯示、帶圖標狀態切換的確定按鈕等常見元素。

完整代碼實現

class HelpAbout extends JDialog implements ActionListener {
    JavaWord mainFrame;
    JButton okButton;
    javax.swing.Timer myTimer;
    int Counter = 0;

    public HelpAbout(JavaWord mainFrame) {
        super(mainFrame, "關於本程序的說明", true);  // true = 模態
        this.mainFrame = mainFrame;

        // 主面板:BorderLayout
        JPanel contentPanel = new JPanel(new BorderLayout());

        // 西側:Logo圖片
        JLabel imageLabel = new JLabel(new ImageIcon(".images/javaLogo.gif"));
        contentPanel.add(imageLabel, BorderLayout.WEST);

        // 北側:作者信息
        JPanel authorInfoPane = new JPanel(new GridLayout(1, 1));
        JTextArea aboutContent = new JTextArea(
            "本程序是作者在學習Java 2 Swing編程的一個簡單程序,並不作商業用途。\n作者聯系方式:"
        );
        aboutContent.setEnabled(false);  // 僅顯示
        authorInfoPane.add(aboutContent);
        contentPanel.add(authorInfoPane, BorderLayout.NORTH);

        // 中央:系統信息(5行網格)
        JPanel sysInfoPane = new JPanel(new GridLayout(5, 1));
        sysInfoPane.setBorder(BorderFactory.createLoweredBevelBorder());
        contentPanel.add(sysInfoPane, BorderLayout.CENTER);

        sysInfoPane.add(new JLabel("本機用戶名:" + System.getProperty("user.name")));
        sysInfoPane.add(new JLabel("操作系統:" + System.getProperty("os.name")));
        sysInfoPane.add(new JLabel("Java SDK版本:" + System.getProperty("java.version")));
        sysInfoPane.add(new JLabel("JVM總內存:" + Runtime.getRuntime().totalMemory() + " 字節"));
        sysInfoPane.add(new JLabel("JVM剩餘內存:" + Runtime.getRuntime().freeMemory() + " 字節"));

        // 南側:確定按鈕面板
        JPanel okPane = new JPanel();
        okButton = new JButton("確定(O)", new ImageIcon(".images/ok.gif"));
        okButton.setMnemonic('O');  // Alt+O 快捷鍵

        // 按鈕圖標狀態:離開、懸停、按下
        Icon general = new ImageIcon(".images/ok.gif");
        Icon rollover = new ImageIcon(".images/exit.gif");
        Icon pressed = new ImageIcon(".images/help.gif");
        okButton.setRolloverEnabled(true);
        okButton.setIcon(general);
        okButton.setRolloverIcon(rollover);
        okButton.setPressedIcon(pressed);

        // 設為對話框默認按鈕(回車觸發)
        this.getRootPane().setDefaultButton(okButton);

        okButton.addActionListener(this);
        okPane.add(okButton);
        contentPanel.add(okPane, BorderLayout.SOUTH);

        setContentPane(contentPanel);
        // setResizable(false); // 可選:固定大小
        pack();  // 自適應大小
        setLocationRelativeTo(mainFrame);  // 居中顯示
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == okButton) {
            dispose();  // 關閉對話框
        }
    }
}

關鍵技術點解析

  • 模態對話框:構造函數第三個參數true,阻塞父窗口交互直到關閉。
  • BorderLayout布局:五大區域靈活安排組件。
  • 系統屬性獲取:System.getProperty()與Runtime.getRuntime()動態顯示運行環境信息。
  • 按鈕圖標狀態:setRolloverIcon()、setPressedIcon()實現豐富視覺反饋。
  • 默認按鈕:getRootPane().setDefaultButton()綁定回車鍵觸發。
  • ActionListener:對話框類自身實現監聽,簡化事件處理。
  • pack()與居中:自動計算優選尺寸並相對父窗口居中。

此範例展示了Swing構建專業級對話框的標準模式,可直接擴展為項目通用的對話框基類。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved