如何在 CardLayout 中显示特定的滚动窗格?
How to show specific scrollpane in a 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);
}
}));
但是单击按钮会显示卡片布局中的第一个面板。
如何解决这个问题?我可以在显示方法中使用滚动窗格名称而不是面板名称吗?
是的,你是对的。
可以将滚动窗格直接添加到卡片布局:
JPanel myPanel = new JPanel();
JScrollPane myScroll = new JScrollPane(myPanel);
this.add(myScroll, "NAME");
CardLayout cl = (CardLayout) this.getLayout();
cl.show(this, "NAME");
添加滚动窗格的简单方法:
JPanel panel = new JPanel();
add(new JScrollPane(panel));
我有 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);
}
}));
但是单击按钮会显示卡片布局中的第一个面板。
如何解决这个问题?我可以在显示方法中使用滚动窗格名称而不是面板名称吗?
是的,你是对的。
可以将滚动窗格直接添加到卡片布局:
JPanel myPanel = new JPanel();
JScrollPane myScroll = new JScrollPane(myPanel);
this.add(myScroll, "NAME");
CardLayout cl = (CardLayout) this.getLayout();
cl.show(this, "NAME");
添加滚动窗格的简单方法:
JPanel panel = new JPanel();
add(new JScrollPane(panel));