如何将JPanels一个接一个地添加到滚动条(或其他一些摇摆容器)

时间:2017-05-02 11:40:09

标签: java swing jpanel

我创建了下面的代码,以便我可以动态地将面板垂直地一个接一个地添加到滚动窗格中。

每个面板都应该有一些绘制的东西(基于从文件加载的数据点的图形,虽然为了简单起见,我改变了代码使其看起来像是一个字符串)。

public void btnShow(Main aThis, ActionEvent evt) {
    String cont = drv.load(fln.filePoints, true);//load file content
    String d[] = cont.split(utf.splt[1]);//split using special symbol
    for (int i = 1; i <= d.length - 1; i++) {
        String fn = d[i] + pth.endPoints;//data split is a filename
        String s = drv.load(fn, true);//load file content
        // Paint string onto panel
        class MyPanel extends JPanel {
            public MyPanel() {
                setBorder(BorderFactory.createLineBorder(Color.black));
            }
            DriveRouter drv = new DriveRouter();

            @Override
            public Dimension getPreferredSize() {
                return new Dimension(100, 100);
            }

            @Override
            public void paintComponent(Graphics g) {
                super.paintComponent(g);
                g.drawString(s, x, y);
            }
        }
        //
        JPanel pan = new MyPanel();
        //Add panel to scrollpane
        aThis.jScrollPane1.add(pan);
    }
}

问题是,没有任何东西出现。

我应该如何将这些面板一个接一个地垂直添加到我的容器中(我为这种情况选择了一个jScrollPane)。

理想情况下,最终产品应该看起来像一个可滚动的文本列表(因为每个面板上都有一个字符串)。当然,使用我的实际代码,这将是一个可滚动的绘制图表列表,每个图形都是一个单独的JPanel。

请帮忙!

注意:我尝试用jTabbedPane替换scrollpane,并且第一次被绘制,并且为每个窗格创建了标签。不幸的是,无论出于何种原因,当我切换标签时都没有出现。

1 个答案:

答案 0 :(得分:3)

你不应该把东西添加到JScrollPane本身而是添加到它的视口 - 检查JScrollPane tutorial这将解释为什么会这样。

此外,如果您要动态添加内容,则需要在添加或删除容器后调用revalidate()repaint(),以便添加的组件布局并重新绘制。

此外,如果您要向JScrollPane添加多个JPanel,那么您应首先将“master”JPanel添加到视口,为其提供一个不错的布局管理器,然后将新的JPanel动态添加到此JPanel,再次重新验证和重绘。

如果您需要更全面的答案,请创建并发布您的MCVE