我正在研究为图形绘制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);
}
}
答案 0 :(得分:1)
您的JPanel需要通过实现getPreferredSize()
来宣传其大小,就像Swing中的任何其他组件一样。 JPanel是一个绘制不透明背景(及其子项)的组件。您正在实现一个自定义组件(可能没有子组件),因此您需要向其父组件(此处为滚动窗格)提供一些大小调整信息,以确保所有内容都布置良好。
您也不应该在滚动窗格上设置边界。使用LayoutManager自动布局所有内容。切勿对GUI进行硬编码。