JPanel网格问题

3

好的,我正在用Java实现一个流程图编辑器。我的目标是提供在绘图表面上显示网格线的可能性。我部分地让它工作了:

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

    // Scrolling
    g2.transform(transformation);   

    // Step one: draw grid
    if(showGrid)
    {
        // Horizontal grid lines
        for(int i = -1; i < getSize().getWidth(); i += 50)
        {
            g2.drawLine(i, 0, i, (int)getSize().getHeight());
        }
        // Vertical grid lines
        for(int i = -1; i < getSize().getHeight(); i += 50)
        {
            g2.drawLine(0, i, (int)getSize().getWidth(), i);
        }
    }

    // Step two: draw symbols
    // ...
}

结果如下所示:alt text

但是,如果我向上或向下滚动图表,我会得到这个: alt text

如上所述,图表被滚动了,但网格没有。我还尝试将步骤一的代码放在g2.transform(transformation)行之前,但在那之后,如果我滚动,网格线就不会移动。
因此,问题是:是否有一种方法可以绘制网格线并避免上述行为?目标是将网格与图表上的其他元素一起滚动。
  1. 列表项
2个回答

1

网格正在滚动,但线条不会延伸到新的边界。

网格随着对象一起滚动。这就是为什么第二个图表底部有空白空间的原因。网格的顶部已经滚动到面板的顶部之外。网格的底部已经滚动到面板底部之上。网格线已经移动。

我唯一看到的问题是网格线应该始终延伸到可见区域的范围。为此,您需要反转getWidth和getHeight的转换,然后在这些值之间的所有50的倍数上绘制网格线。


0

将整个图表绘制并放入JScrollPane中,而不是自己转换滚动操作。


1
这是一个要求在JPanel上执行转换的任务请求。 - sokolovic
这个问题应该在提问中明确说明。还有其他限制吗? - jzd
这不是限制的问题,而是一个问题被问出来,你却说:“不要管你的问题,改做这个。” - Erick Robertson
如果有人问:“我正在试图用火从你的车道上清除雪,但它不像我想要的那样起作用。” 我建议使用铲子。如果他们有阻止他们使用更简单/更好的解决方案的限制,提到它会很有用。 - jzd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接