Java JPanel网格问题

Java JPanel网格问题,java,graphics,grid,jpanel,Java,Graphics,Grid,Jpanel,好的,我正在用Java实现一个流程图编辑器。我的目标是提供在图形表面上显示网格线的可能性。我部分地做到了: public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D)g; // Scrolling g2.transform(transformation); // Step one: draw grid if(s

好的,我正在用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
    // ...
}
公共组件(图形g)
{
超级组件(g);
图形2d g2=(图形2d)g;
//滚动
g2.转化(转化);
//第一步:绘制网格
如果(显示网格)
{
//水平网格线
对于(int i=-1;i
结果如下:

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

如图所示,图是滚动的,而不是网格。我还尝试将第一步代码放在g2.transform(transformation)行之前,但在那之后,如果我滚动,网格线不会移动

所以,问题是:有没有一种方法可以画网格线并避免上述行为?目标是滚动网格和图上的其他元素

  • 列表项

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

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

    网格将与对象一起滚动。这就是为什么在第二张图的底部有空白。网格顶部已从面板顶部滚动。网格底部已在面板底部上方滚动。网格线已移动


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

    在JPanel上执行转换是一个赋值请求。这确实应该在问题中提到。还有其他限制吗?这不是限制的问题。这是一个被问到的问题,而你只是说,“别提你的问题。改为这样做。”如果有人问“我正试图用火清除你车道上的雪,但它不是我想要的那样工作。”。我建议用铲子。如果他们有一个限制,阻止他们使用更简单/更好的解决方案,提及它会很有用。