0

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

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

  • 画几条线
  • 画几根弦

广告

  1. 进近延长两次

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

在 Java 中单击按钮在 JPanel 中绘制一条线

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

但是因为我需要添加第二个功能,所以我需要做这样的事情

public class LineStringPanel extends JPanel {

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

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

执行自定义绘画

Graphics g = panel.getGraphics();

你觉得和可以推荐什么?

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

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

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

JPanel 也在 JScrollPane 内部。

4

1 回答 1

4

如果你需要绘制字符串,你可以直接在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它,它就不会显示在屏幕上。

于 2012-11-26T18:29:18.340 回答