9.7 3 数据的获取与显示
对话框进行点击后,需要对对话框操作得结果进行处理。
默认按钮,焦点选择的按钮,按回车键可以自动选择。
dialog.getRootPane().setDefaultButton(okButton);
效果:
- 页面显示菜单栏,点击 Connect, 弹框,点击 Exit 退出Connect 时触发 JPanelJPanel 内放置JDialog,JDialog显示时,直接把JPanel放在Jdialog 里面显示按钮效果处理,点击ok时触发页面追加信息
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Main {
public static void main(String[] args) {
Main solution = new Main();
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
DataExchangeframe frame = new DataExchangeframe();
frame.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
class DataExchangeframe extends Jframe{
public static final int W = 300;
public static final int H = 200;
private PasswordChooser dialog = null;
private Jtextarea textarea;
public DataExchangeframe(){
setTitle("DataExchangeTest");
setSize(W,H);
JMenuBar mbar = new JMenuBar();
setJMenuBar(mbar);
JMenu fileMenu = new JMenu("File");
mbar.add(fileMenu);
JMenuItem connectItem = new JMenuItem("Connect");
connectItem.addActionListener(new ConnnectAction());
fileMenu.add(connectItem);
JMenuItem exitItem = new JMenuItem("Exit");
exitItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
fileMenu.add(exitItem);
textarea = new Jtextarea();
add(new JScrollPane(textarea),BorderLayout.CENTER);
}
private class ConnnectAction implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
if(dialog == null)
dialog = new PasswordChooser();
dialog.setUser(new User("yourname",null));
if(dialog.showDialog(DataExchangeframe.this,"Contect")){
User u = dialog.getUser();
textarea.append("user name = "+u.getName()+",password = "
+new String(u.getPassword())+"n");
}
}
}
}
class PasswordChooser extends JPanel{
private JTextField username;
private JPasswordField password;
private JButton okButton;
private boolean ok;
private JDialog dialog;
public PasswordChooser(){
setLayout(new BorderLayout());
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(2,2));
panel.add(new JLabel("User name:"));
panel.add(username = new JTextField(""));
panel.add(new JLabel("Password:"));
panel.add(password = new JPasswordField(""));
add(panel,BorderLayout.CENTER);
okButton = new JButton("Ok");
okButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
ok = true;
dialog.setVisible(false);
}
});
JButton cancelButton = new JButton("Cancel");
cancelButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dialog.setVisible(false);
}
});
JPanel buttonPanel = new JPanel();
buttonPanel.add(okButton);
buttonPanel.add(cancelButton);
add(buttonPanel,BorderLayout.SOUTH);
}
public void setUser(User u){
username.setText(u.getName());
}
public User getUser(){
return new User(username.getText(), password.getPassword());
}
public boolean showDialog(Component parent, String title){
ok = false;
frame owner = null;
if(parent instanceof frame)
owner = (frame) parent;
else
owner = (frame) SwingUtilities.getAncestorOfClass(frame.class,parent);
if(dialog == null || dialog.getOwner()!=owner){
dialog = new JDialog(owner,true);
dialog.add(this);
dialog.getRootPane().setDefaultButton(okButton);
dialog.pack();
}
dialog.setTitle(title);
dialog.setVisible(true);
return ok;
}
}
class User{
private String name;
private char[] password;
public User(String name, char[] password) {
this.name = name;
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public char[] getPassword() {
return password;
}
public void setPassword(char[] password) {
this.password = password;
}
}
9.7.4 文件对话框
文件对话框适用于选择、保存文件的,幸运的时Java自带
创建:
JFileChooser chooser = new JFileChooser();
设置当前目录:
chooser.setCurrentDirectory(new File("."));
默认文件名:
chooser.setSelectedFile(new File(fileName));
多文件选择:
chooser.setMultiSelectionEnabled(true);
显示:
int result = chooser.showSaveDialog(parent);
更改按钮:
int result = chooser.showDialog(parent, "Select");
获取选择路径:
String fileName = chooser.getSelectedFile().getPath();
例子,选择图:
import javax.swing.*;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.filechooser.FileView;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
public class Main {
public static void main(String[] args) {
Main solution = new Main();
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
ImageViewframe frame = new ImageViewframe();
frame.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
class ImageViewframe extends Jframe{
public static final int W = 300;
public static final int H = 400;
private JLabel label;
private JFileChooser chooser;
public ImageViewframe(){
setTitle("FileChooserTest");
setSize(W,H);
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
JMenu menu = new JMenu("File");
menuBar.add(menu);
JMenuItem openItem = new JMenuItem("Open");
menu.add(openItem);
openItem.addActionListener(new FileOpenListener());
label = new JLabel();
add(label);
chooser = new JFileChooser();
final FileNameExtensionFilter filter = new FileNameExtensionFilter(
"Image files","png","jpg","jpeg","gif"
);
chooser.setFileFilter(filter);
chooser.setAccessory(new ImagePreviewer(chooser));
chooser.setFileView(new FileIconView(filter,new ImageIcon("./src/resource/doc.png")));
}
private class FileOpenListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
chooser.setCurrentDirectory(new File("."));
int result = chooser.showOpenDialog(ImageViewframe.this);
if(result == JFileChooser.APPROVE_OPTION){
String name = chooser.getSelectedFile().getPath();
label.setIcon(new ImageIcon(name));
}
}
}
}
class FileIconView extends FileView {
private FileFilter filter;
private Icon icon;
public FileIconView(FileFilter aFilter, Icon anIcon){
filter = aFilter;
icon = anIcon;
}
public Icon getIcon(File f){
if(!f.isDirectory() && filter.accept(f))
return icon;
else
return null;
}
}
class ImagePreviewer extends JLabel{
public ImagePreviewer(JFileChooser chooser){
chooser.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
if(evt.getPropagationId() == JFileChooser.SELECTED_FILE_CHANGED_PROPERTY){
File f = (File) evt.getNewValue();
if(f == null){
setIcon(null);
return;
}
ImageIcon icon = new ImageIcon(f.getPath());
if(icon.getIconWidth() > getWidth())
icon = new ImageIcon(icon.getImage().getScaledInstance(
getWidth(),-1,Image.SCALE_DEFAULT
));
setIcon(icon);
}
}
});
}
}
相关内容:选择 《Java核心技术 卷1》查找相关笔记
喜欢的话,点个赞吧~!平时做题,以及笔记内容将更新到公众号。



