我希望 JFileChooser 保存对话框的文件名字段中的文本仅选择文件名而不是扩展名。
我目前有这个:
并希望它看起来像这样:
这是一个简单的更改,但在我看来,它使保存文件变得更加容易,因为用户可以立即开始输入文件名,而不会意外删除扩展名。
我知道如果扩展名丢失,我可以强制添加它,但我不想这样做,因为扩展名不是强制性的,而且我认为不应该强制执行。
那么,我有什么办法可以实现这一目标吗?
API 不直接提供此功能,但一种简单的方法是扫描组件层次结构,寻找JTextField
然后更改该文本字段的选择。
以下是该解决方案的示例:
import java.awt.Component;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class TestJFileChooser {
public TestJFileChooser() {
}
protected void initUI() {
JFrame frame = new JFrame(TestJFileChooser.class.getSimpleName());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JButton button = new JButton("Click me");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser chooser = new JFileChooser();
chooser.setSelectedFile(new File(chooser.getCurrentDirectory(), "save.dat"));
final JTextField textField = getTexField(chooser);
if (textField != null) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
String text = textField.getText();
if (text != null) {
int index = text.lastIndexOf('.');
if (index > -1) {
textField.setSelectionStart(0);
textField.setSelectionEnd(index);
}
}
}
});
}
chooser.showSaveDialog(button);
}
private JTextField getTexField(Container container) {
for (int i = 0; i < container.getComponentCount(); i++) {
Component child = container.getComponent(i);
if (child instanceof JTextField) {
return (JTextField) child;
} else if (child instanceof Container) {
JTextField field = getTexField((Container) child);
if (field != null) {
return field;
}
}
}
return null;
}
});
frame.add(button);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
TestJFileChooser fc = new TestJFileChooser();
fc.initUI();
}
});
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)