我正在做一个 Java 项目,其中包含一些图形内容。我想在 Accordion 菜单之类的东西下显示一组 BufferedImages。这意味着当我单击一个 Accordion 菜单根项时,它应该显示该名称下的一组图像,而当单击另一个根菜单项时,它应该显示另一组图像。我如何用 Java 实现它?有没有办法将 JPanel 添加为 Accordion 菜单叶项?如果有人可以提供示例代码,那就太好了。
最佳答案
无法抗拒一些乐趣:事实证明,可以稍微调整 JXTaskPaneContainer(在 SwingX 中)使其表现得类似于 Accordion 。它只需要强制最多扩展其中一个包含的 JXTaskPaneContainer。类似于代码片段:
JXTaskPaneContainer container = new JXTaskPaneContainer() {
private JXTaskPane current;
private PropertyChangeListener expansionListener;
/**
* @inherited <p>
*/
@Override
protected void addImpl(Component comp, Object constraints, int index) {
super.addImpl(comp, constraints, index);
if (comp instanceof JXTaskPane) {
grabExpansionControl((JXTaskPane) comp);
}
}
private void grabExpansionControl(JXTaskPane comp) {
if (current != null) {
comp.setCollapsed(true);
} else {
current = comp;
comp.setCollapsed(false);
}
comp.addPropertyChangeListener("collapsed",
getExpansionListener());
}
private void updateCurrentTaskPane(JXTaskPane source) {
if (source != current) {
if (!source.isCollapsed()) {
if (current != null) {
current.setCollapsed(true);
}
current = source;
}
}
}
private PropertyChangeListener createExpansionListener() {
PropertyChangeListener l = new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
// TODO Auto-generated method stub
updateCurrentTaskPane((JXTaskPane) evt.getSource());
}
};
return l;
}
private PropertyChangeListener getExpansionListener() {
if (expansionListener == null) {
expansionListener = createExpansionListener();
}
return expansionListener;
}
};
((VerticalLayout) container.getLayout()).setGap(0);
关于java - Accordion 菜单在 java 中显示一组图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6010498/