在做课程设计时利用了java中的Canvas进行绘图,但是发现绘制的图形不能全部显示,即使利用了JScrollPane滚动条也不能使未显示的部分显示出来。我是这样做的,把Canvas添加到一个JPanel里,在把JPanel添加到JScrollPane中,最后把JScrollPane添加到JFrame中。
现在把相关部分代码贴出,求解答啊,不甚感激。
代码如下:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class main {
public void init() {
JFrame f = new JFrame();
JScrollPane sp = new JScrollPane();
sp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
JPanel p = new JPanel();
p.setPreferredSize(new Dimension(1000, 1000));
final MyCanvas C = new MyCanvas();
C.setPreferredSize(new Dimension(1000, 1000));
C.repaint();
p.add(C);
sp.setViewportView(p);
f.add(sp, BorderLayout.CENTER);
f.addWindowListener((new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}));
sp.getHorizontalScrollBar().addAdjustmentListener(
new AdjustmentListener() {
public void adjustmentValueChanged(AdjustmentEvent e) {
C.repaint();
}
});
f.setPreferredSize(new Dimension(500, 500));
f.pack();
f.setVisible(true);
}
public static void main(String[] args) {
new main().init();
}
class MyCanvas extends Canvas {
public void paint(Graphics g) {
g.setColor(new Color(0, 0, 0));
g.drawLine(0, 0, 80, 80);
g.drawOval(0, 0, 1000, 1000);
}
}
}