• 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;  
            
        }
    
    }
  • 相关阅读:
    退役划水一
    Codeforces 1592F2 Alice and Recoloring 2
    AtCoder Regular Contest 108 选做
    AtCoder Regular Contest 107 选做
    AtCoder Regular Contest 106 选做
    AtCoder Regular Contest 105 选做
    2021 年铜陵市青少年编程大赛 部分题解
    Codeforces 1566G Four Vertices
    数据迁移的一般测试步骤
    mac常用命令
  • 原文地址:https://www.cnblogs.com/youxin/p/2791466.html
Copyright © 2020-2023  润新知