如何在CardLayout中显示特定的滚动窗格?

时间:2015-06-04 12:34:55

标签: java swing layout-manager cardlayout

我有JPanel个组件的列表。我想基于单击按钮打开相应的面板。单击按钮时,我传递面板名称。但在我的案例面板中有更多组件,因此我将每个面板添加到JScrollPane并将这些滚动窗格添加到CardLayout

根据此example,以下是将面板添加到卡片布局的代码:

final JPanel  cards=new JPanel(new CardLayout());
cards.setPreferredSize(new Dimension(600, 550));
for (JPanel p:panels) {
    JScrollPane scrollPanel=new JScrollPane(p);
    scrollPanel.setName(p.getName());
    scrollPanel.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    scrollPanel.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
    cards.add(scrollPanel);
}
CardLayout cardLayout=(CardLayout) cards.getLayout();   
cardLayout.show(cards, "name");

control.add(new JButton(new AbstractAction("\u22b2Prev") {

    @Override
    public void actionPerformed(ActionEvent e) {
        CardLayout cl = (CardLayout) cards.getLayout();
        cl.previous(cards);
    }
}));

control.add(new JButton(new AbstractAction("Next\u22b3") {

    @Override
    public void actionPerformed(ActionEvent e) {
        CardLayout cl = (CardLayout) cards.getLayout();
        cl.next(cards);
    }
}));

但是点击按钮会显示卡片布局中的第一个面板。

如何解决这个问题?我可以在show方法中使用滚动窗格名称而不是面板名称吗?

2 个答案:

答案 0 :(得分:1)

是的,你是对的。

滚动窗格可以直接添加到卡片布局中:

JPanel myPanel = new JPanel();
JScrollPane myScroll = new JScrollPane(myPanel);
this.add(myScroll, "NAME");
CardLayout cl = (CardLayout) this.getLayout();
cl.show(this, "NAME");

答案 1 :(得分:0)

添加滚动窗格的简单方法:

JPanel panel = new JPanel();
add(new JScrollPane(panel));