Java:JButton打开另一个我可以输入的JFrame
我希望能够从JFrame中单击一个JButton,打开另一个窗口,在第二个窗口中,我希望能够在该窗口的文本字段中输入一些内容,并从该文本字段中获取信息Java:JButton打开另一个我可以输入的JFrame,java,swing,Java,Swing,我希望能够从JFrame中单击一个JButton,打开另一个窗口,在第二个窗口中,我希望能够在该窗口的文本字段中输入一些内容,并从该文本字段中获取信息 JButton myButton = new JButton("Click Here!"); public void actionPerformed (ActionEvent event) { if (event.getSource() == myButton) { // open the new window } 我知道如何定义这个新JFra
JButton myButton = new JButton("Click Here!");
public void actionPerformed (ActionEvent event)
{
if (event.getSource() == myButton) {
// open the new window }
我知道如何定义这个新JFrame的组件,但是由于不允许嵌套模块,我将如何为这个新窗口编写actionPerformed事件
有没有办法自定义模式对话框窗口的内容?例如,如果我想在弹出窗口中有两个文本字段(这样它可以接受两个输入)?如果我想更改“确定”/“取消”按钮,使其具有不同的标签和/或行为方式,该怎么办
模态对话框(JDialog)或JOptionPane(如JFrame)可以容纳一个JPanel,它具有最复杂的GUI,包括嵌套其他JPanel,这些JPanel使用任何必要的布局并包含多个组件。例如,以下代码创建了JOptionPane,其中显示了一个JPanel,其中包含许多JTextFields,这些字段在JOptionPane返回后都可以提取:
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.util.HashMap;
import java.util.Map;
import javax.swing.*;
public class ComplexDialogPanel extends JPanel {
public static final String[] LABEL_TEXTS = { "Last Name", "First Name",
"Address", "City", "State", "Zip" };
public static final int COLS = 8;
private Map<String, JTextField> labelFieldMap = new HashMap<>();
public ComplexDialogPanel() {
setLayout(new GridBagLayout());
for (int i = 0; i < LABEL_TEXTS.length; i++) {
String labelTxt = LABEL_TEXTS[i];
add(new JLabel(labelTxt), createGbc(0, i));
JTextField textField = new JTextField(COLS);
labelFieldMap.put(labelTxt, textField);
add(textField, createGbc(1, i));
}
setBorder(BorderFactory.createTitledBorder("Enter User Information"));
}
public String getText(String labelText) {
JTextField textField = labelFieldMap.get(labelText);
if (textField != null) {
return textField.getText();
} else {
throw new IllegalArgumentException(labelText);
}
}
public static GridBagConstraints createGbc(int x, int y) {
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = x;
gbc.gridy = y;
gbc.weightx = 1.0;
gbc.weighty = gbc.weightx;
if (x == 0) {
gbc.anchor = GridBagConstraints.LINE_START;
gbc.fill = GridBagConstraints.BOTH;
gbc.insets = new Insets(3, 3, 3, 8);
} else {
gbc.anchor = GridBagConstraints.LINE_END;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.insets = new Insets(3, 3, 3, 3);
}
return gbc;
}
private static void createAndShowGui() {
ComplexDialogPanel mainPanel = new ComplexDialogPanel();
int optionType = JOptionPane.DEFAULT_OPTION;
int messageType = JOptionPane.PLAIN_MESSAGE;
Icon icon = null;
String[] options = { "Submit", "Cancel" };
Object initialValue = options[0];
int reply = JOptionPane.showOptionDialog(null, mainPanel,
"Get User Information", optionType, messageType, icon, options,
initialValue);
if (reply == 0) {
System.out.println("Selections:");
for (String labelText : LABEL_TEXTS) {
System.out.printf("%12s: %s%n", labelText,
mainPanel.getText(labelText));
}
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
导入java.awt.gridbag约束;
导入java.awt.GridBagLayout;
导入java.awt.Insets;
导入java.util.HashMap;
导入java.util.Map;
导入javax.swing.*;
公共类ComplexDialogPanel扩展了JPanel{
公共静态最终字符串[]LABEL_text={“Last Name”,“First Name”,
“地址”、“城市”、“州”、“邮编”};
公共静态最终整数=8;
私有映射labelFieldMap=newHashMap();
公共ComplexDialogPanel(){
setLayout(新的GridBagLayout());
对于(int i=0;i
您在哪一步上卡住了?打开第二个窗口(顺便说一下,它应该是一个模式对话框)?从第二个窗口获取信息?如果可能的话,请展示更多的代码。我不完全确定如何定义第二个窗口(我需要与之交互),我是使用另一个JFrame还是有其他方法?我会将与新窗口的交互放在同一个actionPerformed方法中,还是在同一个类中定义另一个actionPerformed方法会起作用?如果在新窗口中只需要一个文本字段,那么来自JOptionPane
类的输入对话框可能正好满足您的需要。如果你真的需要一个新窗口,那么按照HovercraftFullOfEels的建议创建一个模态对话框(JDialog)。@lootu谢谢,JOptionPane就是我一直在寻找的那种东西。请注意,作为将来的参考,JOptionPane实际上只是模态对话框窗口的一种特殊形式。谢谢,这就是我要找的东西。我很好奇为什么将JPanel扩展到JFrame上?还有哪一行描述了“提交”和“取消”按钮的功能?