gpt4 book ai didi

java - 创建自定义阻塞 Java Swing 提示

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:18:45 26 4
gpt4 key购买 nike

这个问题已经解决了。

我正在开发一个基于 Java Swing 的项目,应用程序的外观和感觉是完全自定义的。我们试图在整个程序中保持一致的外观,默认的 Java 对话框窗口并不相同。

当前问题需要控制阻止调用用户提示。类似于 JOptionPane.showConfirmDialog() 在这种情况下,静态调用会生成一个窗口,并暂停程序的流程,直到用户选择一个选项。它还返回选项的值。请注意,GUI 本身在逻辑上并未锁定,但用户无法与其其余部分进行交互。

int n = JOptionPane.showConfirmDialog(this,
"Are you sure?",
"Confirm"
JOptionPane.YES_NO_OPTION);

我想用自定义的外观复制这个功能,并使用一个字符串。理想情况下,我的代码将如下所示:

String result = CustomPrompt.showPrompt(this,
"Please enter your name", //Text
"Prompt.", //Title
"John Smith"); //Default

这通常用于密码输入,我知道密码的返回类型不同,但这是一个例子。这可以通过在几个类中使用一系列按钮和事件监听器来实现,但代码的可读性和应用程序的可靠性会降低。

框架将通过 NetBeans 构建并从那里定制。我知道 Swing 中已经存在这样的提示,但它的外观和感觉完全不同。

问题总结:如何使用自定义的frame以阻塞的方式提示用户输入。

这个问题的解决方法如下:

public class PromptForm extends JDialog
{
transient char[] result;

public char[] getResult()
{
return result;
}
public PromptForm(Frame parent)
{
super(parent, true);
initComponents();
}
public void prompt()
{
this.setVisible(true);
}
public static char[] promptForPassword(Frame parent)
{
PromptForm pf = new PromptForm(parent);
pf.prompt();
return pf.getResult();
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)
{
result = jPasswordField1.getPassword();
setVisible(false);
dispose();
}
private void initComponents() {...}

private javax.swing.JButton jButton1;
private javax.swing.JPasswordField jPasswordField1;
}

调用者:

    char [] ret = PromptForm.promptForPassword(this);
JOptionPane.showMessageDialog(this, new String(ret), "Neat", JOptionPane.QUESTION_MESSAGE);

最佳答案

使 CustomPrompt 扩展 JDialog ,让它的构造函数调用 super 传递所有者 Window 和所需的 ModalityType .

public class CustomPrompt extends JDialog {

public static String showPrompt(Window parent, String title, String text,
String defaultText) {
final CustomPrompt prompt = new CustomPrompt(parent);
prompt.setTitle(title);
// set other components text
prompt.setVisible(true);

return prompt.textField.getText();
}

private JTextField textField;

// private if you only want this prompt to be accessible via constructor methods
private CustomPrompt(Window parent) {
super(parent, Dialog.DEFAULT_MODALITY_TYPE);
// Java >= 6, else user super(Frame, true) or super(Dialog, true);
initComponents(); // like Netbeans
}

// initComponents() and irrelevant code.
}

关于java - 创建自定义阻塞 Java Swing 提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9099371/

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