gpt4 book ai didi

Java showInputDialog 选择自定义文本

转载 作者:行者123 更新时间:2023-12-02 10:55:32 28 4
gpt4 key购买 nike

我有用于重命名文件的重命名对话框

String renameTo = JOptionPane.showInputDialog(gui, "New Name", currentFile.getName());

它是这样工作的,但我有一个问题。问题是我用文件扩展名设置了默认值但我只想选择文件名。

sample : my file name = yusuf.png

我只想选择 yusuf 之类的;

like this

最佳答案

JOptionPane 内部发生了很多事情,这是使它如此强大的原因之一,但也使它有点不灵活。

两个迫在眉睫的问题很明显......

  1. 您无法直接访问用于获取用户输入的 JTextField
  2. JOptionPane 想要控制首次显示对话框时哪些组件具有焦点。

设置JTextField实际上很简单......

String text = "yusuf.png";
int endIndex = text.lastIndexOf(".");

JTextField field = new JTextField(text, 20);
if (endIndex > 0) {
field.setSelectionStart(0);
field.setSelectionEnd(endIndex);
} else {
field.selectAll();
}

这基本上会选择从 String 开头到最后一个 . 的所有文本,或者如果没有 . 则选择所有文本被发现。

现在困难的部分是从 JOptionPane 收回焦点控制

// Make a basic JOptionPane instance
JOptionPane pane = new JOptionPane(field,
JOptionPane.PLAIN_MESSAGE,
JOptionPane.OK_CANCEL_OPTION,
null);
// Use it's own dialog creation process, it's simpler this way
JDialog dialog = pane.createDialog("Rename");
// When the window is displayed, we want to "steal"
// focus from what the `JOptionPane` has set
// and apply it to our text field
dialog.addWindowListener(new WindowAdapter() {
@Override
public void windowActivated(WindowEvent e) {
// Set a small "delayed" action
// to occur at some point in the future...
// This way we can circumvent the JOptionPane's
// focus control
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
field.requestFocusInWindow();
}
});
}
});
// Put it on the screen...
dialog.setVisible(true);
dialog.dispose();
// Get the resulting action (what button was activated)
Object value = pane.getValue();
if (value instanceof Integer) {
int result = (int)value;
// OK was actioned, get the new name
if (result == JOptionPane.OK_OPTION) {
String newName = field.getText();
System.out.println("newName = " + newName);
}
}

并且,交叉手指,我们最终得到的东西看起来像......

Example

就我个人而言,我会将其包装在一个很好的可重用类/方法调用中,该调用根据用户的操作返回新文本或 null,但这就是我

Isn't there an easier way?

当然,我只是想向您展示最困难的解决方案...😳(讽刺)...这就是为什么我建议将它包装在它自己的实用程序类中,以便您以后可以重复使用它😉

关于Java showInputDialog 选择自定义文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51776707/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com