JScrollPane不使用JPanel绘制Graphics

时间:2016-04-19 09:54:07

标签: java jpanel jscrollpane

我正在研究为图形绘制GUI的项目,似乎JScrollPane没有很好地实现,因为当某些节点被绘制出面板边界时它不起作用,这里是代码:< / p>

public class Test extends JFrame {
public Test() {
    // TODO Auto-generated constructor stub
    MyPanel panel = new MyPanel();

    JScrollPane scrollPane = new JScrollPane(panel);
    scrollPane
            .setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    scrollPane
            .setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    scrollPane.setBounds(50, 30, 500, 500);

    JPanel contentPane = new JPanel(null);
    contentPane.setPreferredSize(new Dimension(600, 600));
    contentPane.add(scrollPane);

    this.setContentPane(contentPane);
    this.pack();
    this.setSize(600, 600);
    this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    this.setLocationRelativeTo(null);
    this.setVisible(true);
}
private class MyPanel extends JPanel {
    @Override
    public void paint(Graphics g) {
        // in panel range
        g.fillOval(0, 200, 100, 100);
        // out of panel range needs scroll bar
        g.fillOval(1000, 200, 100, 100);
    }
}

1 个答案:

答案 0 :(得分:1)

您的JPanel需要通过实现getPreferredSize()来宣传其大小,就像Swing中的任何其他组件一样。 JPanel是一个绘制不透明背景(及其子项)的组件。您正在实现一个自定义组件(可能没有子组件),因此您需要向其父组件(此处为滚动窗格)提供一些大小调整信息,以确保所有内容都布置良好。

您也不应该在滚动窗格上设置边界。使用LayoutManager自动布局所有内容。切勿对GUI进行硬编码。