问题描述
您好,我是Java编码的新手,并尝试在JFrame和jdialog的帮助下设计一个用户友好的桌面应用程序-
我的JFrame是-
package com.myapp.ui;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JCheckBox;
public class MyFrame extends JFrame {
private JPanel contentPane;
public static void main(String[] args) {
EventQueue.invokelater(new Runnable() {
public void run() {
try {
MyFrame frame = new MyFrame();
frame.setVisible(true);
} catch (Exception e) {
e.printstacktrace();
}
}
});
}
public MyFrame() {
setTitle("MyFrame");
setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100,100,450,300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5,5,5));
setContentPane(contentPane);
contentPane.setLayout(null);
JButton btnClickMe = new JButton("Click Me");
btnClickMe.setBounds(271,171,115,29);
contentPane.add(btnClickMe);
JCheckBox chckbxOpenDialog = new JCheckBox("Open Dialog");
chckbxOpenDialog.setBounds(25,139,29);
contentPane.add(chckbxOpenDialog);
chckbxOpenDialog.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(chckbxOpenDialog.isSelected()== true){
MyDialog MD = new MyDialog();
MD.setModal(true);
MD.setVisible(true);
}
}
});
btnClickMe.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//Here I want to get the value of textFieldName and textFieldEmail from jdialog
//after Click on Confirm Button in jdialog and closing/disposing it
}
});
}
}
我的jdialog是-
package com.myapp.ui;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.jdialog;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JTextField;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class MyDialog extends jdialog {
private final JPanel contentPanel = new JPanel();
private JTextField textFieldName;
private JTextField textFieldEmail;
private JButton btnConfirm;
public static void main(String[] args) {
try {
MyDialog dialog = new MyDialog();
dialog.setDefaultCloSEOperation(jdialog.disPOSE_ON_CLOSE);
dialog.setVisible(true);
} catch (Exception e) {
e.printstacktrace();
}
}
public MyDialog() {
setTitle("MyDialog");
setBounds(100,300);
getContentPane().setLayout(new BorderLayout());
contentPanel.setBorder(new EmptyBorder(5,5));
getContentPane().add(contentPanel,BorderLayout.CENTER);
contentPanel.setLayout(null);
textFieldName = new JTextField();
textFieldName.setBounds(108,26,146,26);
contentPanel.add(textFieldName);
textFieldName.setColumns(10);
textFieldEmail = new JTextField();
textFieldEmail.setBounds(108,68,26);
contentPanel.add(textFieldEmail);
textFieldEmail.setColumns(10);
btnConfirm = new JButton("Confirm");
btnConfirm.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//passing the Name and Email field value in JFrame
}
});
btnConfirm.setBounds(132,141,29);
contentPanel.add(btnConfirm);
MyFrame MF = new MyFrame();
}
}
的价值
textFieldName和textFieldEmail从jdialog到JFrame
如果有人能以最好的方式指导我,那就太好了。
解决方法
您可以:
- 将设置器添加到MyFrame
- 在
MyFrame
中创建MyDialog
对this
的引用(使用ActionListener
)(使用ActionListener
- 在
MyDialog
的{{1}}的{{1}}中设置字段
可能有更好的方法可以做到这一点。内置的MyFrame
生成模态对话框窗口,等待用户输入。这比将JFrame的引用传递给JDialog更好。
还请注意,JOptionPane
已大大取代了Java JavaFX
用于桌面用户界面