繁体   English   中英

在JScrollPane内的JPanel上绘画无法在正确的位置绘画

[英]Painting on a JPanel inside a JScrollPane doesn't paint in the right location

所以我有一个JPanelJScrollPane内部。 现在,我试图在面板上绘画一些东西,但是它总是在同一位置。 我可以向各个方向滚动,但不会移动。 我在面板上绘制的所有内容都不会滚动。

我已经尝试过:

  1. 定制的JViewPort
  2. 在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()

覆盖getPreferredSize()方法,而不是使用setPreferredSize()

final JPanel panel = new JPanel(){
    @Override
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        // your custom painting code here
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(40, 40);
    }
};

一些要点:

  1. 重写JComponent#getPreferredSize()而不是使用setPreferredSize()

    阅读更多我应该避免在Java Swing中使用set(Preferred | Maximum | Minimum)Size方法吗?

  2. 使用Swing Timer代替更适合Swing应用程序的Java Timer

    了解更多如何使用Swing计时器

  3. 使用UIManager.setLookAndFeel()设置默认外观

    阅读更多内容如何设置外观

  4. 如何修复Java中的动画滞后?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM