我是jdialog的新手,我进行了搜索,但似乎找不到使用自定义按钮的解决方案。我发现的唯一解决方案是使用其内置的输入JDialog。但这不能解决我的问题。
我试图将数据(单击“保存”后,从对话框texfield“ hello”传递到父框架textField),但无法这样做。
有人遇到同样的问题吗? 有帮助吗?
public class dataparse {
String result;
String inputValue;
public void mainFrame() {
JFrame frame = new JFrame(" Parent Frame ");
JPanel center = new JPanel();
JButton enter = new JButton("Enter");
// JLabel data = new JLabel("data is...");
JTextField text = new JTextField();
frame.setSize(400, 400);
center.setLayout(new GridLayout(0, 1));
center.add(text);
center.add(enter);
frame.add(center, BorderLayout.CENTER);
enter.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
confirmDialog();
text.setText(inputValue);
}
});
frame.setVisible(true);
}
private void confirmDialog(){
JTextField output = new JTextField("Hellloooo");
JButton save = new JButton("Save");
JDialog customDialog = new JDialog();
Container pane = customDialog.getContentPane();
pane.setLayout(new GridLayout(0,1));
pane.add(new JLabel("Startubg"));
pane.add(output);
pane.add(save);
customDialog.setSize(300,400);
customDialog.add(output);
customDialog.add(save);
customDialog.setVisible(true);
save.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
result = output.getText();
}
});
}
预先感谢您:)
对于一个实例,我有2个类,我希望第二个类从第一个类调用dialog.dispose()。但我无法调用该方法,任何想法
main.java
public JDialog dialogBox(){
//JDialog dialog = new JDialog(frame, "Date picker", true);
dialogButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
dialog = new JDialog(frame,"Date picker " , true);
DatePicker_Demo picker = new DatePicker_Demo();
dialog.setSize(500, 300);
dialog.setLayout(new GridLayout(0,2));
dialog.add(new DatePicker_Demo().addBtn());
dialog.pack();
dialog.setVisible(true);
}
});
return dialog;
}
second.java
public JButton addBtn(){
JButton btn = new AddBills().exitBtn();
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
new AddBills().dialogBox().dispose();
}
});
return btn;
}
答案 0 :(得分:0)
将text.setText部分放在“保存”按钮的actionListener中有什么问题?
例如
slide
答案 1 :(得分:0)
public class Window extends JFrame {
private JPanel contentPane;
private JTextField txtField;
private JButton btnSave;
private static Window frame2; // making it static so i can work on it from main()
private static int num = 500;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Window frame1 = new Window();
frame2 = new Window();
frame1.setVisible(true);
frame2.setVisible(true);
frame2.txtField.setText("");// clear the text box of window 2
frame2.setTitle("window 2");
frame2.btnSave.setVisible(false); // won't see button on window 2
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Window() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100 + num, 100, 506, 514);
setTitle("window1");
num += num; // so you can see both windows
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
txtField = new JTextField();
txtField.setText("Hello");
txtField.setBounds(39, 151, 376, 117);
contentPane.add(txtField);
txtField.setColumns(10);
btnSave = new JButton("save");
btnSave.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
String text = txtField.getText(); // get the text after save button was clicked.
txtField.setText("");// clear textfield of window 1.
frame2.txtField.setText(text); // set the text on textField of window 2
setVisible(true); // update
frame2.setVisible(true); // update
}
});
btnSave.setBounds(169, 302, 115, 29);
contentPane.add(btnSave);
}
}
当然,您可以使它更加面向对象,但我想以一种形式简化它,以便您可以一眼看到。
答案 2 :(得分:0)
您可以像以下示例中那样进行操作。我认为代码中缺少的重要行是setModal(true);
。
没有setModal(true);
行,执行将直接从confirmDialog();
转到text.setText(inputValue);
,而无需等待用户在对话框中输入文本。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class InputDialogExample {
public static void main(String[] args) {
JFrame frame = new JFrame("Frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel label = new JLabel();
JButton openDialogButton = new JButton("Open Dialog");
openDialogButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
CustomDialog dialog = new CustomDialog(frame);
dialog.setVisible(true);
label.setText(dialog.getValue());
}
});
frame.getContentPane().setLayout(new GridLayout(2, 1));
frame.getContentPane().add(label);
frame.getContentPane().add(openDialogButton);
frame.setBounds(300, 200, 400, 300);
frame.setVisible(true);
}
}
class CustomDialog extends JDialog {
private String value;
CustomDialog(Frame owner) {
super(owner, "Dialog");
setModal(true); // This is the important line
JTextField textField = new JTextField();
JButton okButton = new JButton("OK");
okButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
value = textField.getText();
setVisible(false);
}
});
getContentPane().setLayout(new GridLayout(2, 1));
getContentPane().add(textField);
getContentPane().add(okButton);
setBounds(500, 400, 300, 200);
}
String getValue() {
return value;
}
}