在Swing中切换面板和传递数据

时间:2010-12-15 07:06:08

标签: java swing jframe jpanel

我刚刚开始使用Swing - 如果这个问题难以理解,我很抱歉,但我觉得这是一个非常简单的事情,但在Swing中看起来非常难。

我有一个包含两个文本字段和一个提交按钮的面板。

我在提交按钮上添加了一个监听器,当它被点击时我验证了数据等。

现在,我希望框架显示一个新面板 - 使用文本字段和提交按钮摆脱当前面板,并根据在文本字段中输入的数据实例化一个新面板。

如何将此数据发送回框架,因此框架可以移除当前面板并将其替换为使用第一个面板中的数据创建的新的不同面板。

虽然这不是我正在做的事情,但它可以被认为是登录。

显示登录面板 Panel获取用户名和密码,验证(验证也可以更高) 如果已验证,请使用真实内容面板替换登录面板

这很难在Swing中弄明白。我应该定义自己的事件类型并使框架成为该事件的监听器吗?

2 个答案:

答案 0 :(得分:1)

如果我理解你的问题,你可以使用这样的回调逻辑;

MyLoginPanel login = new MyLoginPanel(new IMyCallback(){

            public void processLogin(){
                //frame can remove the current panel and replace it with a new
            }

        });
  • MyLoginPanel从Jpanel扩展为Constructor public MyLoginPanel(IMyCallback callback)
  • IMyCallback是一个具有public void processLogin()方法的接口。

您可以从LoginPanel

调用callback.processLogin();

它对你有用吗?

答案 1 :(得分:1)

您应该查看java.awt.CardLayout。此布局可以处理多个彼此堆叠的面板。您可以选择哪个面板应该是最顶层的,因此可见。

以下代码显示了上述教程中的相关部分:

//Where instance variables are declared:
final static String BUTTONPANEL = "Card with JButtons";
final static String TEXTPANEL = "Card with JTextField";


//Where the components controlled by the CardLayout are initialized:
//Create the "cards".
JPanel card1 = new JPanel();
JPanel card2 = new JPanel();

//Create the panel that contains the "cards".
JPanel cards = new JPanel(new CardLayout());
cards.add(card1, BUTTONPANEL);
cards.add(card2, TEXTPANEL);

并切换可见面板:

CardLayout cl = (CardLayout)(cards.getLayout());
cl.show(cards, TEXTPANEL);