我有一个应用程序,它使用JDialog从用户那里获取输入,然后搜索文件,而不是浏览对话框,而是使用元数据的更专业的文件。
这一切都很好。唯一的问题是我希望能够让用户输入搜索值,按确定,并接收这些值来执行搜索和其他一些操作(来自打开对话框的调用类)而不关闭对话框?< / p>
有必要从调用类中执行这些操作,因为这是编辑器中插件的一部分。
基本上,简而言之,它有点像“查找”对话框在任何编辑器中的工作方式 - 当您从一个找到的项目跳到下一个项目时,查找对话框保持打开状态...
好像我错过了一些简单的东西,但我看不出怎么做。
编辑:
我根据Nick Rippe建议的教程在一个简单的测试应用程序中尝试过这个,但我认为我在某种程度上误解了它,因为我无法让它工作。我添加了一个带有getter和setter的字段,然后尝试获取它:
主要课程:
public class TestJFrames {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
TestForm frame = new TestForm();
frame.setDefaultCloseOperation(frame.DO_NOTHING_ON_CLOSE);
frame.addPropertyChangeListener("fileSelected", new FileSelectedListener());
frame.setVisible(true);
}
}
class FileSelectedListener implements PropertyChangeListener {
@Override
public void propertyChange(PropertyChangeEvent evt) {
System.out.println("TEST");
}
}
从表单类:
private String fileSelected;
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
this.setFileSelected("Test");
}
public String getFileSelected() {
return fileSelected;
}
public void setFileSelected(String fileSelected) {
this.fileSelected = fileSelected;
}
我最终找到了另一种解决方案。如果它可以帮助其他有类似困难的人,请在此处发布:
通过将它注册为对话框类的监听器,我可以通过调用类来监听按钮事件。我几乎遵循了这个例子:Create a custom event in Java
答案 0 :(得分:5)
Java教程有一个section specifically devoted to this。我建议检查一下。
将其与Getting User Input部分相结合,您就可以得到您想要的内容。
修改强>
以下是一些关于修改教程的例子:
import java.awt.event.*;
import javax.swing.*;
public class Temp extends Box{
JFrame frame;
JTextArea text;
public Temp(JFrame frame){
super(BoxLayout.Y_AXIS);
this.frame = frame;
text = new JTextArea("Clickity Clack, down't the track.\nspam");
add(text);
JButton button = new JButton("Click Me");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
launchDialog();
}
});
add(button);
}
public void launchDialog(){
//What you want the find button to do
JButton findButton = new JButton("Find");
findButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int start = text.getText().indexOf("spam");
int end = start + "spam".length();
if(start != -1){
text.requestFocus();
text.select(start, end);
}
}
});
//Cancel button hides the dialog
JButton cancelButton = new JButton("Cancel");
// Create the options displayed in the dialog
final JOptionPane optionPane = new JOptionPane(
"Find \"spam\"?\n"
+ "Do you understand?",
JOptionPane.QUESTION_MESSAGE,
JOptionPane.YES_NO_OPTION, null, new Object[]{findButton, cancelButton});
// Build the dialog window
final JDialog dialog = new JDialog(frame,
"Click a button",
false);
//Add action to close button
cancelButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dialog.setVisible(false);
}
});
//Finish up and make it visible
dialog.setContentPane(optionPane);
dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
dialog.setLocation(100, 100);
dialog.pack();
dialog.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(new Temp(frame));
frame.pack();
frame.setVisible(true);
}});
}
}