Java 两个JPanel之间的ActionListener匿名类

Java 两个JPanel之间的ActionListener匿名类,java,swing,button,jpanel,actionlistener,Java,Swing,Button,Jpanel,Actionlistener,我试着进入面板,以递归方式彼此协作 当我在主GUI上时,我有第一个带有按钮Add Client的JPanel, 单击后,它会将我带到带有表单的JPanel,然后我恢复这些值, 并在主GUI的第一个JPanel中的JTable中发送它们 当我尝试插入第二条记录时。我得到一个空白的GUI。我不太确定我做错了什么。如何实现多次重复相同的操作?这就是加载表单,输入信息,把它推到表上,这个过程会重复我所需要的次数 这是主GUI中的添加客户端按钮声明 Button btn_AddClient = new B

我试着进入面板,以递归方式彼此协作

当我在主GUI上时,我有第一个带有按钮Add Client的JPanel, 单击后,它会将我带到带有表单的JPanel,然后我恢复这些值, 并在主GUI的第一个JPanel中的JTable中发送它们

当我尝试插入第二条记录时。我得到一个空白的GUI。我不太确定我做错了什么。如何实现多次重复相同的操作?这就是加载表单,输入信息,把它推到表上,这个过程会重复我所需要的次数

这是主GUI中的添加客户端按钮声明

Button btn_AddClient = new Button("Add Client");
        btn_AddClient.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                panel.setVisible(false);
                contentPane.setVisible(false);
                setContentPane(contentPaneClient);
            }
        });
        btn_AddClient.setBounds(259, 12, 70, 22);
        contentPane.add(btn_AddClient); 
这是第二个面板中表单的“添加”按钮

JButton btnAdd = new JButton("Add");
        btnAdd.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent arg0) {


                setContentPane(contentPaneClient);
                panel.setVisible(true);
                contentPane.setVisible(true);
                contentPaneClient.setVisible(false);
                LigneJTab l = new LigneJTab(textFieldPrenomClient.getText(),textFieldNomClient.getText(), textFieldAdresseClient.getText(), chckbxHomme.isSelected(), Sport.FOOTBALL);
                myModel.addLine(l);
                setContentPane(contentPane);
            }
        });
        btnAdd.setBounds(263, 40, 117, 29);
        contentPaneClient.add(btnAdd);
注释了顶部并添加了
setContentPane(contentPane)这就成功了


谢谢

另一个想法是:不需要交换内容窗格来请求数据。更优雅的方法是使用模态对话框。要创建一个对话框,请首先创建一个对话框类:

public class MyDialog extends JDialog {
    public MyDialog(Frame parent) {
        super(parent);
        setModalityType(Dialog.ModalityType.APPLICATION_MODAL);
        // add components to getContentPane()
        // to close dialog, use setVisible(false) in listeners
    }

    public OutputData getData() {
        OutputData data = new OutputData();
        show();
        // show only returns after a setVisible(false)
        data.field = textField.getText();
        // for example, repeat as many times as necessary
        return data;
    }
}
要从
JFrame
调用此对话框,请使用以下代码:

MyDialog dialog = new MyDialog(this);
OutputData data = dialog.getData()
// now retrieve fields from data

1-我会非常小心地混合AWT和Swing组件(
按钮和
JButton
),2-避免使用
设置框,使用适当的布局管理器,3-看看,这将使不同视图之间的交换变得相当简单,4-尝试提供一个示例,因为代码段没有提供足够的上下文。我将研究SSCE,因为这是我在Java中的第一篇文章。为什么混合使用AWT和Swing是一个坏主意?代码太长,无法提供SSCCE,而且它还包含一些其他类。我将当前应用程序作为可运行的JAR文件上传,以便您可以看到发生了什么。我们不关心它在做什么,我们关心它是如何做的。一个可运行的jar既没用又有安全风险,我怀疑这里的任何人都不会愿意下载和运行看起来有趣的jar。。。很难从javascript背景了解所有内容是如何工作的,因为在javascript背景下,所有内容都不是类型化的,因此是程序化的。。。。java是完全面向对象的,很难遵循所有这些类以及要做多少。。。。所有适配器和术语,如泛型类。。。。子类或类内部。。。我发现很难理解像……这样的变量。。。。上下文上下文。。。。。父母亲这接口和抽象类之间的差异。。。。对于非常慢的初学者,有什么好的网站推荐吗?这不管用,我满脸通红。我做对了什么?你没有做错什么。我不知道为什么这不起作用,但我可能对此有一个更新。更新:你应该将此视为一个模板,指导你填写注释中解释的要点。您还需要定义
OutputData
类。
MyDialog dialog = new MyDialog(this);
OutputData data = dialog.getData()
// now retrieve fields from data