gpt4 book ai didi

java - 设计: extend JPanel twice or pass JPanel as parameter?

转载 作者:行者123 更新时间:2023-12-01 18:57:14 27 4
gpt4 key购买 nike

我这里有设计问题。有两个选项听起来可以实现,但我都不喜欢。

我需要在 JPanel 中提供两个功能。

  • 画几条线
  • 绘制多个字符串

广告

  1. 接近拉伸(stretch)两次

如果我只需要画线,那么我可以从以下答案中复制过去的解决方案。

Draw a line in a JPanel with button click in Java

public class LinePanel extends JPanel {
...
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
...

但是由于我需要添加第二个功能,我需要做这样的事情

public class LineStringPanel extends JPanel {

这将使 LinePanel 只是无用的中间类。

  • 创建两个类 LineDrawer 和 StringDrawer 并将 JPanel 作为参数传递给某个执行绘图的方法。我需要调用的问题是不推荐的。
  • Performing Custom Painting

    Graphics g = panel.getGraphics();

    您有什么想法和建议?

    UPD:JPanel 内部有许多 JLabels 作为子项,代表单位和特征。

    线条是单位某些特征之间的关系,字符串是某些操作的通知。

    所以我想在子 JLabel 的顶部(前面)显示字符串。

    JPanel 也位于 JScrollPane 内部。

    最佳答案

    如果您需要draw strings ,您可以直接在 paintComponent 方法中执行此操作(假设您不需要任何太花哨的东西,这非常简单):

    @Override
    protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    ...
    g.drawLine(p1.x, p1.y, p2.x, p2.y);
    ...
    g.setColor(Color.black);
    g.drawString("My Text", 0, 20);
    }

    然后您就可以使用垃圾神的解决方案,几乎不需要任何更改。

    请记住,坐标是文本的基线 - 因此,如果您使用 0,0,它将不会显示在屏幕上。

    关于java - 设计: extend JPanel twice or pass JPanel as parameter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13563840/

    27 4 0