当前位置: 首页 > 工具软件 > jDialog > 使用案例 >

java jdialog_java swing JDialog 使用

邓正真
2023-12-01

创建对话框窗口的主要类。可以使用此类创建自定义的对话框,或者调用 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();

}

}

另一篇文章:

问题如下:

点击一个按钮,弹出一个对话框,对话框里面包含 确定 和 取消 按钮

若点击确定,返回值为0,点击取消,返回值为1

若超过10秒不点击,提示窗口自动关闭,返回值为-5

后续可以根据返回值来做各种不同的判断。

1.TimerTest 主程序,先运行main方法,然后点击按钮

packageJDialog;importjava.awt.Dimension;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.JButton;importjavax.swing.JFrame;public class TimerTest extendsJFrame {/****/

private static final long serialVersionUID = 1L;private staticJButton button;private staticTimerTest TimerTest;public static voidmain(String[] args) {

TimerTest= newTimerTest();

button= new JButton("按我");

button.addActionListener(newActionListener() {

@Overridepublic voidactionPerformed(ActionEvent e) {

TimeDialog d= newTimeDialog();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);

}

}

packageJDialog;importjava.awt.Dimension;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.util.concurrent.Executors;importjava.util.concurrent.ScheduledExecutorService;importjava.util.concurrent.TimeUnit;importjavax.swing.JButton;importjavax.swing.JDialog;importjavax.swing.JFrame;importjavax.swing.JLabel;public classTimeDialog {private String message = null;private int secends = 0;private JLabel label = newJLabel();privateJButton confirm,cancel;private JDialog dialog = null;int result = -5;public int showDialog(JFrame father, String message, intsec)

{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(newActionListener() {

@Overridepublic voidactionPerformed(ActionEvent e) {

result= 0;

TimeDialog.this.dialog.dispose();

}

});

cancel= new JButton("拒绝");

cancel.setBounds(190,40,60,20);

cancel.addActionListener(newActionListener() {

@Overridepublic voidactionPerformed(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(newRunnable() {

@Overridepublic voidrun() {//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);returnresult;

}

}

 类似资料: