我是新使用j对话框的swing,我一直在搜索,但是我似乎找不到使用自定义按钮的解决方案。我找到的唯一解决方案是使用他们内置的输入JDialog。但这不能解决我的问题。
我试图在单击“保存”后将数据(从对话框文本字段"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();
}
});
}(预先谢谢:)
例如,我有两个类,我希望第二个类从第一个类调用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;
}发布于 2019-01-29 09:59:45
将text.setText部件放入“保存”按钮的actionListener中有什么问题?
例如
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
result = output.getText();
text.setText(result);
}发布于 2019-01-29 11:09:50
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);
}
}当然,您可以使它更OOP,但我想保持简单的形式,以便您可以看到它的全部。
发布于 2019-01-29 12:54:30
在下面的例子中,您可以这样做。我认为您在代码中遗漏的重要行是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;
}
}https://stackoverflow.com/questions/54418274
复制相似问题