JScrollPane,内部重叠面板

时间:2014-03-17 21:38:13

标签: java jscrollpane overlap

我目前有一个JScrollPane,我在其中放置了面板。 由于某种原因,面板不是并排放置,而是在JScrollPane的左上角彼此重叠。

public class UI extends javax.swing.JFrame {
    ArrayList<LibraryImagePanel> libPanels;

    /**
     * Creates new form UI
     */
    public UI() {
        initComponents();
        this.setResizable(false);

        scrollpane_library.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        scrollpane_library.add(new LibraryImagePanel());

        libPanels = new ArrayList<>();
    }

...

}


class LibraryImagePanel extends JPanel {
    /**
     * CTOR
     */
    LibraryImagePanel(){
        this.setSize(256, 256);
    }
    /**
     * 
     * @param g Graphics
     */    
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawLine(0,0,20,20);
        repaint();
    }

}

2 个答案:

答案 0 :(得分:0)

  1. JPanel
  2. 中插入单个父JScrollPane
  3. 将其LayoutManager设置为水平或流式布局(或您喜欢的任何一种)。
  4. 将所有LibraryImagePanel添加到此父面板。
  5. 希望这有帮助。

    修改
    当您更改其中的组件层次结构(添加或删除元素)时,还需要在面板上调用validate() 只需致电

    scrollPanel.validate();
    

    将每个面板添加到其中后。

答案 1 :(得分:0)

您的代码示例似乎缺少一些重要部分(您在哪里创建scrollpane_library?)无论如何scrollpane_libraryJScrollPane,请尝试将面板传递给JScrollPane的构造函数。您还可以通过构造函数设置滚动条策略。

您可以在JScrollPane中拥有单个组件。如果您要滚动多个面板,则创建另一个包含这些面板的JPanel(让我们调用此bigPanel),然后在JScrollPane中使用bigPanel