JScrollPane 不适用于 JPanel 绘图图形
JScrollPane is not working with JPanel drawing Graphics
我正在做一个为图形绘制 GUI 的项目,似乎 JScrollPane 没有很好地实现,因为当某些节点被绘制出面板的边界时它不起作用,这是代码:
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);
}
}
您的 JPanel 需要通过实现 getPreferredSize()
来宣传其大小,就像 Swing 中的任何其他组件一样。 JPanel 是一个绘制不透明背景(及其子背景)的组件。您正在实现一个自定义组件(可能没有子组件),因此您需要为其父组件(此处为滚动窗格)提供一些大小信息,以确保一切都布置得很好。
您也不应该在滚动窗格上设置边界。使用 LayoutManager 自动布置所有内容。切勿对 GUI 进行硬编码。
我正在做一个为图形绘制 GUI 的项目,似乎 JScrollPane 没有很好地实现,因为当某些节点被绘制出面板的边界时它不起作用,这是代码:
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);
}
}
您的 JPanel 需要通过实现 getPreferredSize()
来宣传其大小,就像 Swing 中的任何其他组件一样。 JPanel 是一个绘制不透明背景(及其子背景)的组件。您正在实现一个自定义组件(可能没有子组件),因此您需要为其父组件(此处为滚动窗格)提供一些大小信息,以确保一切都布置得很好。
您也不应该在滚动窗格上设置边界。使用 LayoutManager 自动布置所有内容。切勿对 GUI 进行硬编码。