java swing JDialog 使用


創建對話框窗口的主要類。可以使用此類創建自定義的對話框,或者調用 JOptionPane 中的多個類方法來創建各種標准對話框。有關創建對話框的信息,請參閱 The Java Tutorial 中的 How to Make Dialogs 一節。

JDialog 組件包含一個 JRootPane 作為其唯一子組件。contentPane 應該是所有 JDialog 子組件的父級。為了方便使用 add 及其變體,已經重寫了remove 和 setLayout,以在必要時將其轉發到 contentPane。這意味着可以編寫:

       dialog.add(child);

******************

java提供了JDialog與JOptionPane供我們使用,事實上,JOptionPane是陽春版的JDialog,當你在使用 JOptionPane時,系統會自動產生JDialog組件,並將JOptionPane的內容放入JDialog的ContentPane中,而這些均由系統在背后自動 運行,並不需要由我們介入。使用JOptionPane的好處是此組件已經默認了許多交互方式,你只用設置想要的顯示模式,JOptionPane 就能輕易的顯示出來,可說相當方便,若這些模式還是無法滿足你的需求,你就可以使用JDialog來自行設計你的對話框。 我們先來看如何構造JDialog,JOptionPane將在后半段介紹:

JDialog構造函數:
  • JDialog():建立一個non-modal的對話框,沒有title也不屬於任何事件窗口組件。
  • JDialog(Dialog owner):建立一個屬於Dialog組件的對話框,為non-modal形式,也沒有title.
  • JDialog(Dialog owner,Boolean modal):建立一個屬於Dialog組件的對話框,可決定modal形式,但沒有title.
  • JDialog(Dialog owner,String title):建立一個屬於Dialog組件的對話框,為non-modal形式,對話框上有title.
  • JDialog(Dialog owner,String title,Boolean modal):建立一個屬於Dialog組件的對話框,可決定modal形式,且對話框上有 title.
  • JDialog(Frame owner):建立一個屬於Frame組件的對話框,為non-modal形式,也沒有title.
  • JDialog(Frame owner,Boolean modal):建立一個屬於Frame組件的對話框,可決定modal形式,但沒有title.
  • JDialog(Frame owner,String title):建立一個屬於Frame組件的對話框,為non-modal形式,對話框上有title.
  • JDialog(Frame owner,String title,Boolean modal):建立一個屬於Frame組件的對話框,可決定modal形式,且對話框上有title. 經常用這個構造函數。

上面所說的modal是一種對話框操作模式,當modal為true時,代表用戶必須結束對話框才能回到原來所屬的窗口。當modal為 false時,代表對話框與所屬窗口可以互相切換,彼此之間在操作上沒有順序性。

一般而言對話框都會依附在某個窗口上,例如JFrame或JDialog,原因在於對話框通常是一個程序運行的過程中與用戶互動的中 間過程,在使用JDialog上跟JFrame非常相似,由上面的JDialog層次結構圖中你可以發現,JDialog是繼承AWT的Dialog類而來,因 此JDialog為一個Heavyweight組件。要加入組件到JDialog上與JFrame是一樣的,你必須先取得JDialog的ContentPane,然后再把組 件加到此ContentPane中,JDialog默認的版面管理器是BorderLayout.

public class DialogDemo extends JDialog {

JLabel about = new JLabel("關於:這可是JAVA寫的連連看哦!");
public DialogDemo()
{
this.setTitle("About");
this.setSize(320, 200);
this.setVisible(true);

this.getContentPane().add(about, BorderLayout.CENTER);

}
public static void main(String[] args)
{
new DialogDemo();
}

}

另一篇文章: 

java 自定義確認取消的Dialog對話框,10秒之后自動關閉

 問題如下:

 點擊一個按鈕,彈出一個對話框,對話框里面包含 確定 和 取消 按鈕

若點擊確定,返回值為0,點擊取消,返回值為1

若超過10秒不點擊,提示窗口自動關閉,返回值為-5

后續可以根據返回值來做各種不同的判斷。

1.TimerTest 主程序,先運行main方法,然后點擊按鈕

package JDialog;

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;



public class TimerTest extends JFrame {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private static JButton button;
    private static TimerTest TimerTest;

    public static void main(String[] args) {
        TimerTest = new TimerTest();
        button = new JButton("按我");
        button.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent e) {
               TimeDialog d = new TimeDialog();
               int result = d.showDialog(TimerTest, "對方想要和你語音是否接受?", 10);// TimerTest是程序主窗口類,彈出的對話框10秒后消失
                System.out.println("===result: "+result);
            }
        });
        
        button.setBounds(2, 5, 80,20);
        TimerTest.getContentPane().setLayout(null);
        TimerTest.getContentPane().add(button);
        TimerTest.setSize(new Dimension(400,200));
        TimerTest.setLocation(500,200);
        TimerTest.setVisible(true);
        TimerTest.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

}

 

package JDialog;

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class TimeDialog {
    private String message = null;  
    private int secends = 0;  
    private JLabel label = new JLabel();  
    private JButton confirm,cancel;   
    private JDialog dialog = null;  
    int result = -5;  
    public int  showDialog(JFrame father, String message, int sec) 
    {  
        this.message = message;  
        secends = sec;  
        label.setText(message);  
        label.setBounds(80,6,200,20);  
        ScheduledExecutorService s = Executors.newSingleThreadScheduledExecutor();  
        confirm = new JButton("接受");  
        confirm.setBounds(100,40,60,20);  
        confirm.addActionListener(new ActionListener() {              
            @Override  
            public void actionPerformed(ActionEvent e) {  
                result = 0;  
                TimeDialog.this.dialog.dispose();  
            }  
        });  
        cancel = new JButton("拒絕");  
        cancel.setBounds(190,40,60,20);  
        cancel.addActionListener(new ActionListener() {  
              
            @Override  
            public void actionPerformed(ActionEvent e) {  
                result = 1;  
                TimeDialog.this.dialog.dispose();  
            }  
        });  
        
        dialog = new JDialog(father, true);  
        dialog.setTitle("提示: 本窗口將在"+secends+"秒后自動關閉");  
        dialog.setLayout(null);  
        dialog.add(label);  
        dialog.add(confirm);  
        dialog.add(cancel);  
        s.scheduleAtFixedRate(new Runnable() {  
              
            @Override  
            public void run() {  
                // TODO Auto-generated method stub  
                  
                TimeDialog.this.secends--;  
                if(TimeDialog.this.secends == 0) {  
                    TimeDialog.this.dialog.dispose();  
                }else {  
                    dialog.setTitle("提示: 本窗口將在"+secends+"秒后自動關閉");  
                }  
            }  
        }, 1, 1, TimeUnit.SECONDS);  
        dialog.pack();  
        dialog.setSize(new Dimension(350,100));  
        dialog.setLocationRelativeTo(father);  
        dialog.setVisible(true);  
        return result;  
        
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM