——1、对话框 Dialog
java.awt.Dialog
和Window一样可以独立存在的一个窗体
但是注意:
1、Dialog对象一定需要一个依附的父级窗口
2、两种模式(模式和非模式),模式打开后总是位于父级窗口的上面,且没关闭对话框是无法获得的父级窗口的焦点
案例:
packagecn.dzz;import javax.swing.*;import java.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;public classMain {public static voidmain(String[] args) {//创建窗体
Frame frame = newFrame();//创建两个对话框,一个模式的,一个非模式的
Dialog modalDialog = new Dialog(frame, "modal-dialog", true);
Dialog nonModalDialog= new Dialog(frame, "non-modal-dialog", false);//通过setBounds来实现出现在界面上的位置
modalDialog.setBounds(20,30,300,200);
nonModalDialog.setBounds(20,30,300,200);//通过按钮触发弹出
Button mdBtn = new Button("modal-dialog-button");
Button nmdBtn= new Button("non-modal-dialog-button");
mdBtn.addActionListener(newActionListener() {
@Overridepublic voidactionPerformed(ActionEvent e) {
modalDialog.setVisible(true);
}
});
nmdBtn.addActionListener(newActionListener() {
@Overridepublic voidactionPerformed(ActionEvent e) {
nonModalDialog.setVisible(true);
}
});
Box verticalBox=Box.createVerticalBox();
verticalBox.add(mdBtn);
verticalBox.add(nmdBtn);
frame.add(verticalBox, BorderLayout.CENTER);//可见 与 自适应
frame.setVisible(true);
frame.pack();
}
}
案例2:在dialog对象基础上,再向里面添加组件
packagecn.dzz;importjavafx.scene.layout.Border;importjavafx.scene.layout.Pane;import javax.swing.*;import java.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;public classMain {public static voidmain(String[] args) {
Frame frame= new Frame("GUI-LESSON");
Box verticalBox=Box.createVerticalBox();
Button button= new Button("dialog-demo");
verticalBox.add(button);
frame.add(verticalBox, BorderLayout.CENTER);//dialog嵌入
Dialog dialog = new Dialog(frame, "dialog", true);
Box verticalBox1=Box.createVerticalBox();
verticalBox1.add(new TextField(20));
verticalBox1.add(new Button("OK"));
dialog.add(verticalBox1, BorderLayout.CENTER);
button.addActionListener(newActionListener() {
@Overridepublic voidactionPerformed(ActionEvent e) {
dialog.setVisible(true);
}
});
frame.pack();
dialog.pack();//不要忘记dialog对象也是一个窗体,也需要进行pack自适应
frame.setVisible(true);
}
}
——2、FileDialog文件对话框
java.awt.FileDialog
表示文件对话框,无法选择模式,由底层操作系统的状态决定
几个方法:
String getDirectory(); 获取打开或者保存的文件路径(绝对路径)
String getFile(); 获取打开或者保存的文件名称(仅名称)
案例:
packagecn.dzz;importjavafx.scene.layout.Border;importjavafx.scene.layout.Pane;import javax.swing.*;import java.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;public classMain {public static voidmain(String[] args) {
Frame frame= new Frame("GUI-LESSON");//先来设置打开文件对话框的按钮
Box verticalBox =Box.createVerticalBox();
Button openFileButton= new Button("openFileButton");
Button saveFileButton= new Button("saveFileButton");
verticalBox.add(openFileButton);
verticalBox.add(saveFileButton);
frame.add(verticalBox, BorderLayout.CENTER);//创建两个文件对话框对象
FileDialog openD = new FileDialog(frame, "open-target", FileDialog.LOAD);
FileDialog saveD= new FileDialog(frame, "save-target", FileDialog.SAVE);//按钮触发的事件处理
openFileButton.addActionListener(newActionListener() {
@Overridepublic voidactionPerformed(ActionEvent e) {
openD.setVisible(true); //无论打开还是保存的文件对话框,没有点击确认的最终位置,程序只会停留在这里//确认之后程序向下执行得到我们需要的文件路径和文件名
String directory =openD.getDirectory();
String file=openD.getFile();
System.out.println("打开的路径 " +directory);
System.out.println("打开的文件名 " +file);
}
});
saveFileButton.addActionListener(newActionListener() {
@Overridepublic voidactionPerformed(ActionEvent e) {
saveD.setVisible(true);
String directory=saveD.getDirectory();
String file=saveD.getFile();
System.out.println("保存的路径 " +directory);
System.out.println("保存的文件名 " +file);
}
});
frame.pack();
openD.pack();
saveD.pack();
frame.setVisible(true);
}
}
实际使用时可以发现,如果最后取消了文件选择
那么获取文件路径和文件名的方法返回的值为NULL
打开的路径 C:\Users\Administrator\IdeaProjects\GUI-Lesson\
打开的文件名 GUI-Lesson.iml
保存的路径null保存的文件名null打开的路径null打开的文件名null保存的路径null保存的文件名null