java swing JDialog 使用
2012-11-27 21:09 youxin 阅读(14471) 评论(0) 编辑 收藏 举报创建对话框窗口的主要类。可以使用此类创建自定义的对话框,或者调用 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; } }