0
在回顾了这个问题的现有答案之后,我仍然处于黑暗中。我试图在标签框架内实现可滚动面板。我正在使用JScrollPane
和JTabbedPane
。但是,滚动不起作用。使用JScrollPane和JTabbedPane
这是我的代码:
public TabbedFrame(List<Panel> panels) {
super(new GridLayout(1, 1));
JTabbedPane tabbedPane = new JTabbedPane();
int layerNum = 0;
for (Panel p: panels){
JScrollPane scrollPane = new JScrollPane(
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollPane.setViewportView(p);
scrollPane.setPreferredSize(new Dimension(500, 500));
tabbedPane.addTab("Layer " + layerNum, null, scrollPane, "Layer " + layerNum);
layerNum++;
}
//Add the tabbed pane to this panel.
add(tabbedPane);
//The following line enables to use scrolling tabs.
tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
}
public class Panel extends JPanel{
private static final long serialVersionUID = 4109034958236244752L;
private Design design;
public Panel(Design design){
this.design = design;
this.setSize(design.getCanvasWidth(), design.getCanvasHeight());
}
public void paint(Graphics G) {
G.setColor(design.getColor());
design.draw(G);
}
public int getWidth() { return design.getCanvasWidth(); }
public int getHeight() { return design.getCanvasHeight(); }
}
我会感激你可以提供任何帮助。
为了更好地帮助越早,张贴[MCVE]或[简要,独立的,正确的示例](http://www.sscce.org /)。 –
*“但是,滚动不起作用。”* - 我猜是因为您实际上从未实际将任何组件添加到'Panel'实例?绘制到它不会计算它的首选大小(你应该重写'paintComponent(Graphics)'而不是'paint(Graphics'))。为此,您可以*重写* getPreferredSize()方法。但是'scrollPane.setPreferredSize(new Dimension(500,500));'在这里没有任何作用,它仍然会延伸到所有可用空间。但如前所述,如果这不能解决您的问题,请发布一个MCVE。 –