2017-03-02 182 views
-2

好的,我正在使用卡布局将面板从1个面板切换到第二个面板&,然后切换到第三个面板。我一直在网上查找,但我无法找到我正在寻找的东西。我希望我的面板处于不同的类别,并使用按钮切换到不同的面板来回切换。我发现了几个来源,但所有面板都添加到原始面板,然后使用原始面板上的相同按钮切换到不同面板。使用卡布局的Java GUI切换面板

(即)面板2使用按钮从面板1切换到面板3和面板3使用按钮从面板1切换到面板4和面板4使用按钮从面板1切换回面板2.

但它应该是面板1使用面板1上的按钮切换到面板2,面板2使用面板2上的按钮切换到面板3,面板3应使用面板3上的按钮切换到面板1,这意味着在那里应该不需要第四个面板。

我的问题是我想使用不同的按钮来回切换,而不是相同的按钮,因为我打算在每个面板的每个按钮中写入额外的代码。因为我基本上想要创建3个面板,所以一旦细节被添加到注册表单中,并且用户点击注册,细节被添加到数据库,然后它切换到登录面板并关闭注册面板。 如果登录面板与数据库中的条目匹配,则会输入用户名和密码,并且用户单击登录后会转到新面板并关闭登录面板。

现在我已经完成注册和登录阶段,它只是从1个面板切换到另一个是问题。有没有办法使用卡布局,所以你切换到不同的面板使用不同的按钮为每个面板来做到这一点,还是有一些其他方法用来做到这一点。

如果需要,我可以追加我的代码。但它连接到一个数据库,所以它不会在没有数据库的情况下编译。

+0

另外值得一提的我是新来使用卡片布局,因为我通常使用多个帧每虽然我知道它不好的编程框架之间切换。 – William

+0

我基本上想要做什么splungebob问在堆栈溢出早期问题莫名其妙未必与卡布局http://stackoverflow.com/questions/15840686/cardlayout-switch-between-jpanels-by-buttonclick – William

+0

*“我可以如果需要附加我的代码。但它连接到数据库,所以它不会在没有数据库的情况下进行编译。“* 1)我们不希望代码转储,发布[MCVE]或[简短自包含正确示例](http:// www .sscce.org /)。2)用一些硬编码数据替换数据库。 –

回答

0

你最初需要一个4.面板女巫包含3个面板,并有cardLayout。

要从卡片中更换卡片,您需要使用next()方法移交一个actionlistener。我做了一个小而不美观的例子来展示我的意思;-)

public class CardExample{ 

private class panel extends JPanel{ 

    private panel(ActionListener alNext, String text){ 
     JButton buttonNext = new JButton("next"); 
     buttonNext.addActionListener(alNext); 

     JLabel textLabel = new JLabel(text); 

     this.add(textLabel); 
     this.add(buttonNext); 
    } 
} 

public CardExample(){} 

public static void main(String[] args){ 

    CardExample ce = new Cardexample(); 
    ce.myGUI(); 
} 

private void myGUI() { 

    JFrame frame = new JFrame(); 
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
    frame.setLocationRelativeTo(null); 
    frame.setSize(200, 200); 

    CardLayout cardLayout = new CardLayout(); 

    frame.getContentPane().setLayout(cardLayout); 

    ActionListener al = e -> cardLayout.next(frame.getContentPane()); 

    frame.getContentPane().add(new panel(al, "Panel 1")); 
    frame.getContentPane().add(new panel(al, "Panel 2")); 
    frame.getContentPane().add(new panel(al, "Panel 3")); 

    frame.setVisible(true); 
} 

} 
0

不管按钮位于同一个面板还是不同的面板都是不相关的。

该按钮只是从布局管理器执行一个方法。您可以使用:

  1. 下一个(...) - 走在了CardLayout下一个面板,或
  2. 秀(...) - 显示在CardLayout特定面板。

如果您无法使用CardLayout访问面板,则可以轻松获取该面板。在ActionListener的为你的按钮,你可以这样做:

JButton button = (JButton)event.getSource(); 
JPanel buttonPanel = (JPanel)button.getParent(); 
JPanel cardPanel = (JPanel)buttonPanel.getParent(); 
CardLayout layout = (CardLayout)cardPanel.getLayout(); 
layout.next(cardPanel);