【问题标题】:How to use buttons to switch to a specific JPanel?如何使用按钮切换到特定的 JPanel?
【发布时间】:2016-10-30 11:50:40
【问题描述】:

我想使用按钮切换到特定面板,而不是使用 JPanel().next 和 JPanel().previous 进入下一个面板。

假设我有 3 页,通过使用标有“转到第 3 页”的按钮,它会将我带到我为第 3 页创建的面板;在那个页面上,我会有更多的按钮可以让我回到第 1 页,甚至第 2 页。假设我有第十页,一个按钮可以让我直接进入它,而我不必单击下一步按钮。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

/* Here we are first declaring our class that will act as the
* base for other panels or in other terms the base for CardLayout.
 */

public class CardLayoutExample
{
    private static final String CARD_JBUTTON =  "Card JButton";
    private static final String CARD_JTEXTFIELD = "Card JTextField";    
    private static final String CARD_JRADIOBUTTON = "Card JRadioButton";

private static void createAndShowGUI()
{
    JFrame frame = new JFrame("Card Layout Test");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocationRelativeTo(null);

    // This JPanel is the base for CardLayout for other JPanels.
    final JPanel contentPane = new JPanel();
    contentPane.setLayout(new CardLayout(20, 20));

    /* Here we are making objects of the Window Series classes
     * so that, each one of them can be added to the JPanel 
     * having CardLayout. 
     */
    Window1 win1 = new Window1();
    contentPane.add(win1, CARD_JBUTTON);
    Window2 win2 = new Window2();
    contentPane.add(win2, CARD_JTEXTFIELD);
    Window3 win3 = new Window3();
    contentPane.add(win3, CARD_JRADIOBUTTON);

    /* We need two JButtons to go to the next Card
     * or come back to the previous Card, as and when
     * desired by the User.
     */
    JPanel buttonPanel = new JPanel(); 
    final JButton page1Button = new JButton("Go to page 1");
    final JButton page5Button = new JButton("Go to Page 5");
    final JButton page10Button = new JButton("Go to Page 10");
    buttonPanel.add(page1Button);
    buttonPanel.add(page5Button);
    buttonPanel.add(page10Button);

    /* Adding the ActionListeners to the JButton,
     * so that the user can see the next Card or
     * come back to the previous Card, as desired.
     */
    page1Button.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent ae)
        {
            CardLayout cardLayout = (CardLayout) contentPane.getLayout();
            cardLayout.previous(contentPane);
        }
    });
    page5Button.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent ae)
        {
            CardLayout cardLayout = (CardLayout) contentPane.getLayout();
            cardLayout.next(contentPane);   
        }
    });

    //page10Button.addActionListener(new ActionListener();
    //Code to navigate to page 10...

    // Adding the contentPane (JPanel) and buttonPanel to JFrame.
    frame.add(contentPane, BorderLayout.CENTER);
    frame.add(buttonPanel, BorderLayout.PAGE_END);

    frame.pack();
    frame.setVisible(true);
}

public static void main(String... args)
{
    SwingUtilities.invokeLater(new Runnable()
    {
        public void run()
        {
            createAndShowGUI();
        }
    });
}
} 

当我单击一个按钮时,我设置了我的方法,但它只导航到下一页,而不是我想要的那个。

.next 和 .previous 还有哪些其他替代方法?我想转到特定页面。

感谢您的帮助。

【问题讨论】:

标签: java swing jbutton layout-manager cardlayout


【解决方案1】:

添加到卡片布局时,您可以指定一个“键”,稍后在尝试显示特定面板时可以引用该键。 下面的示例应该可以帮助您入门:

CardLayout myCardLayout = new CardLayout();
JPanel myCardLayoutPanel = new JPanel(myCardLayout);
myCardLayoutPanel.add(myComponent, "A_KEY");
myCardLayout.show(myCardLayoutPanel,"A_KEY");

另外你应该查看docs

【讨论】:

    猜你喜欢
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 2018-03-30
    • 2022-11-18
    • 2014-06-15
    相关资源
    最近更新 更多