java - JScrollPane 中的 Jpanel,在滚动条上绘制

标签 java swing custom-controls jscrollpane graphics2d

我遇到如图所示的问题

Drawing overlays scrollbars

我的添加过程如下:

JFrame -> View 面板 -> JTabbedPane -> JPanel(我的 Canvas )

我在paintComponent中绘制绘图,并在最后调用revalidate()。非常感谢您的帮助!

编辑:

paint组件代码

public void paintComponent(Graphics g) {
    super.paintComponent(g);        
    Graphics2D g2d = (Graphics2D) g;

    //Obtain document size
    double width = model.getWidth();
            double height = model.getHeight();

    canvasBounds = new Rectangle2D.Double(0, 0, width, height);
    g2d.setColor(Color.WHITE);
    g2d.fill(canvasBounds);

    Dimension size = new Dimension();
    size.setSize(canvasBounds.getWidth() * zoomFactor, canvasBounds.getHeight() * zoomFactor);
    this.setPreferredSize(size);

    g2d.setClip(canvasBounds);
    List<DrawableShape> svgShapes = model.getDrawableShapes();
    for(DrawableShape shape : shapeList) {
        shape.draw(g2d);            
    }           
    revalidate();
}

最佳答案

看起来有些东西不遵守您的剪辑的范围。也许它在 shape.draw() 方法中被更改?

为什么不尝试创建一个新的 Graphics 对象来传递给 shape.draw(),而不是 setClip()。像这样的事情...

Graphics2D newG = (Graphics2D)g.create(0, 0, width, height);

然后将代码更改为...

shape.draw(newG);

关于java - JScrollPane 中的 Jpanel,在滚动条上绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10620883/

相关文章:

java - Java中数组是按值传递还是按引用传递?

java - 在缓冲图像上绘图

java - 将单选按钮值从一个类传递到另一个类

angular - 模糊事件未在 Angular 分量上触发

android - 获取 styled 属性中使用的可绘制引用的资源 id

java - Selenium:element.clear() 在 sendKeys() 之前触发 javascript

java - eclipse插件项目根目录

java - 在 JLabel 中的某些文本上监听 MouseEvents

c# - 自定义 Xamarin 表单控件的数据绑定(bind)失败,但适用于普通控件

Java 观察者模式 - 如何在更新(通知)循环/迭代期间删除观察者?