Java 带预览的自定义对话框

Java 带预览的自定义对话框,java,swing,user-interface,dialog,Java,Swing,User Interface,Dialog,对于我当前的项目,我需要一个自定义对话框,允许用户选择一个值并获取其详细信息的自定义预览。我试着编写自己的窗口类来扩展JFrame,但到目前为止,我一直停留在最重要的部分:如何显示对话框的窗口,让用户进行输入,然后返回所选的值 我试图查看JOptionPane.showInputDialog的代码,但我没有理解它是如何工作的,反而感到困惑 以下是解决我问题的方法: import java.util.Vector; 导入javax.swing.JComboBox; 导入javax.swing.JF

对于我当前的项目,我需要一个自定义对话框,允许用户选择一个值并获取其详细信息的自定义预览。我试着编写自己的窗口类来扩展
JFrame
,但到目前为止,我一直停留在最重要的部分:如何显示对话框的窗口,让用户进行输入,然后返回所选的值

我试图查看
JOptionPane.showInputDialog
的代码,但我没有理解它是如何工作的,反而感到困惑

以下是解决我问题的方法:

import java.util.Vector;
导入javax.swing.JComboBox;
导入javax.swing.JFrame;
导入javax.swing.JTextArea;
公共类MyCustomDialog扩展了JFrame{
JComboBox组合框;
区域详情;
公共MyCustomDialog(矢量数据){
comboBox=新的JComboBox(数据);
comboBox.setSelectedIndex(-1);
comboBox.setEditable(false);
addActionListener(ActionEvent->updateDetails());
getContentPane().add(组合框);
详细信息=新的JTextArea();
details.setEditable(false);
详细信息。set不透明(假);
getContentPane().add(详细信息);
setVisible(真);
}
void updateDetails(){
int-selectedIndex=comboBox.getSelectedIndex();
如果(已选择索引<0){
详情。setText(“”);
返回;
}
MyCustomObject selected=comboBox.getItemAt(selectedIndex);
details.setText(selected.getDescription());
}
静态MyCustomObject显示对话框(矢量向量){
//这就是我被困的地方
//showDialog需要:
//1.创建框架并向用户显示
//2.让用户选择一个值,并多次更改其选择
//3.让用户确认选择,例如使用按钮
//4.返回所选值
返回null;
}
公共静态void main(字符串…参数){
向量向量=新向量();
矢量添加(新的MyCustomObject(“测试对象1”、“测试信息1”);
添加向量(新的MyCustomObject(“测试对象2”、“测试信息2”));
System.out.println(选择了showDialog(vec)+“被选中”);
}
公共静态类MyCustomObject{
最终字符串描述;
最后的字符串名;
公共MyCustomObject(字符串名称、字符串描述){
this.name=名称;
this.description=描述;
}
字符串getDescription(){return description;}
@凌驾
公共字符串toString(){return name;}
}
}
由于垃圾神的回答更新了代码

import java.util.Vector;
导入javax.swing.JComboBox;
导入javax.swing.JOptionPane;
导入javax.swing.JPanel;
导入javax.swing.JTextArea;
公共类MyCustomDialog扩展了JPanel{
JComboBox组合框;
区域详情;
MyCustomDialog(矢量数据){
comboBox=新的JComboBox(数据);
comboBox.setSelectedIndex(-1);
comboBox.setEditable(false);
addActionListener(ActionEvent->updateDetails());
添加(组合框);
详细信息=新的JTextArea();
details.setEditable(false);
详细信息。set不透明(假);
增加(详情);
}
void updateDetails(){
int-selectedIndex=comboBox.getSelectedIndex();
如果(已选择索引<0){
详情。setText(“”);
返回;
}
MyCustomObject selected=comboBox.getItemAt(selectedIndex);
details.setText(selected.getDescription());
}
静态MyCustomObject显示对话框(矢量向量){
MyCustomDialog=新建MyCustomDialog(vec);
int result=JOptionPane.showConfirmDialog(null,对话框,“测试对话框”,JOptionPane.OK\u取消选项,JOptionPane.PLAIN\u消息);
if(result==JOptionPane.OK\u选项){
int-selectedIndex=comboBox.getSelectedIndex();
如果(selectedIndex>=0)返回comboBox.getItemAt(selectedIndex);
}
返回null;
}
公共静态void main(字符串…参数){
向量向量=新向量();
矢量添加(新的MyCustomObject(“测试对象1”、“测试信息1”);
添加向量(新的MyCustomObject(“测试对象2”、“测试信息2”));
System.out.println(选择了showDialog(vec)+“被选中”);
}
公共静态类MyCustomObject{
最终字符串描述;
最后的字符串名;
公共MyCustomObject(字符串名称、字符串描述){
this.name=名称;
this.description=描述;
}
字符串getDescription(){return description;}
@凌驾
公共字符串toString(){return name;}
}
}
如何显示对话框的窗口,让用户进行输入,然后返回所选值

通常的方法是使用,可见,这是处理此用法的一种方便方法。可以找到更多的例子

除了使用
JOptionPane
,是否没有其他选项


您可以使用
JDialog
,包括或不包括
JOptionPane
,分别如图和所示。

1)除非运行并在屏幕上显示代码,否则这不是运行时问题的SSCCE。该代码需要(至少)一个
main(String[])
方法,以便其他人在屏幕上看到它。2) 因此,为了澄清,您指的是显示
MyCustomObject
?@andrewhompson(关于2):不是详细信息和编辑对话框,而是详细信息和选择对话框的详细信息/编辑对话框。您不应该编辑任何
MyCustomObject
实例。另请参见。@trashgod对不起,但在用户执行提交输入的操作(例如按下按钮)之后,这如何帮助我获取用户的输入?@flashdrive2049:您的程序同步错误;它的行为是不确定的;使用
JOptionPane
也可查看此内容。