如何在具有特定坐标系的可调整大小的 JPanel 上绘制自定义组件?

问题描述 投票:0回答:1

我正在开发一个图形树可视化应用程序。该程序可以创建不同的布局来可视化树木。我所说的树是指一个 Node 对象,它可以有一个 Node 作为父节点,以及一个称为子节点的节点列表。通过为树创建布局,我的意思是设置树的每个节点的 X 和 Y 坐标。有多种布局算法,它们都在 LayoutAlgorithm 接口的实现中,其中一种方法采用根节点(树中没有父节点的一个节点),并计算根节点的每个节点的 X 和 Y 坐标树。

为了可视化这些布局,我可以使用 JPanel,并准确地告诉我想要在哪个坐标中绘制节点,然后,我可以在它们之间绘制线条。这有点问题,因为,我想在水平左侧和垂直中间绘制一个 x=0 和 y=0 坐标的节点。为了实现这一点,我可以简单地偏移每个节点的 y 坐标,然后绘制它们,但我希望 JPanel 可以调整大小。这也可以通过在发生调整大小操作后重新绘制每个节点来实现。但这太复杂了,所以我想知道是否有更简单/更简单的解决方案,例如 JPanel 的自定义 LayoutManager。

我尝试了几个 LayoutManager,但没有一个允许我使用坐标将 JComponent 放在面板上。

swing resize jpanel coordinates layout-manager
1个回答
0
投票

通过创建自定义 JComponent 类并重写 Paint 方法,可以通过调用 g.translate(...) 方法来偏移要绘制的组件和图形的坐标。

import javax.swing.*;
import java.awt.*;

public class VerticallyAlignedJPanel extends JPanel {

    public VerticallyAlignedJPanel() {
        super();
        setLayout(null);
    }

    @Override
    protected void paintComponent(Graphics g) {
        g.translate(0, getHeight()/2);
        super.paintComponent(g);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.