【发布时间】:2014-05-31 19:35:19
【问题描述】:
所以我有一个JPanel,它位于JScrollPane 中。
现在我想在面板上画一些东西,但它总是在同一个地方。
我可以向各个方向滚动,但它不动。我在面板上绘制的任何内容都不会滚动。
我已经试过了:
- 自定义
JViewPort - 在 Opaque = true 和 Opaque = false 之间切换
我还考虑过覆盖面板的paintComponent 方法,但这在我的代码中很难实现。
public class ScrollPanePaint{
public ScrollPanePaint() {
JFrame frame = new JFrame();
final JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(1000, 1000));
//I tried both true and false
panel.setOpaque(false);
JScrollPane scrollPane = new JScrollPane(panel);
frame.add(scrollPane);
frame.setSize(200, 200);
frame.setVisible(true);
//To redraw the drawing constantly because that wat is happening in my code aswell because
//I am creating an animation by constantly move an image by a little
new Thread(new Runnable(){
public void run(){
Graphics g = panel.getGraphics();
g.setColor(Color.blue);
while(true){
g.fillRect(64, 64, 3 * 64, 3 * 64);
panel.repaint();
}
}
}).start();
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new ScrollPanePaint();
}
});
}
}
我犯的错误可能很容易改正,但我就是不知道怎么改。
【问题讨论】:
-
为什么很难在
JPanel上实现paintComponent()方法? -
因为我所有的绘图代码都必须在 JPanels paintComponent 方法中。我需要从其他子程序中借鉴它。就像我在 JPanel 上绘制实体的实体类一样,不能在 paintComponent 方法中。或者我可能做的事情真的很傻。
标签: java swing jpanel jscrollpane draw