与绘图线一起创建标签

2023-12-12

我问了一个有关自定义小部件的问题,但对我是否需要它以及应该如何进行感到困惑。

我目前有这门课

public class GUIEdge {

   public Node node1;
   public Node node2;
   public int weight;
   public Color color;
    public GUIEdge(Node node1, Node node2 , int cost) {
       this.node1 = node1;
       this.node2 = node2;
       this.weight = cost;
       this.color = Color.darkGray;
    }

    public void draw(Graphics g) {
        Point p1 = node1.getLocation();
        Point p2 = node2.getLocation();
        g.setColor(this.color);
        ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        g.drawLine(p1.x, p1.y, p2.x, p2.y);

    }
}

目前,这在两点之间绘制了一条边,但现在我希望成本标签也随之创建。

我已经添加了用于拖动节点和边缘的处理,那么创建标签的最佳方法是什么

我需要为此制作一个自定义小部件吗?谁能解释一下,假设通过从 JComponent 扩展来创建一个组件,然后我将通过 g.mixed() 来调用它,其中 mixed 是新的小部件......?


工具提示当然值得一看。其他选择包括drawString(), translate(), or TextLayout。有许多examples可用的。

附录:下面的示例显示了两者drawString() and setToolTipText(),正如@Catalina Island 所建议的。为了简单,端点相对于组件的大小,因此您可以看到调整窗口大小的结果。

附录:使用setToolTipText()仅演示该方法。正如@camickr 所说here,你应该覆盖getToolTipText(MouseEvent)并在鼠标悬停在线上或选择该线时更新提示。

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Point;
import javax.swing.JComponent;
import javax.swing.JFrame;

/** @see https://stackoverflow.com/questions/5394364 */
public class LabeledEdge extends JComponent {

    private static final int N = 20;
    private Point n1, n2;

    public LabeledEdge(int w, int h) {
        this.setPreferredSize(new Dimension(w, h));
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        this.n1 = new Point(N, N);
        this.n2 = new Point(getWidth() - N, getHeight() - N);
        g.drawLine(n1.x, n1.y, n2.x, n2.y);
        double d = n1.distance(n2);
        this.setToolTipText(String.valueOf(d));
        g.drawString(String.valueOf((int) d),
            (n1.x + n2.x) / 2, (n1.y + n2.y) / 2);
    }

    private static void display() {
        JFrame f = new JFrame("EdgeLabel");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(new LabeledEdge(320, 240));
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                display();
            }
        });
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

与绘图线一起创建标签 的相关文章

随机推荐

  • 在 Dart 中解密 AES/CBC/PKCS5Padding 加密

    我已经有了java加密代码 现在我想使用我的服务器上的 API 即使在尝试了各种教程和示例代码之后 我也无法成功解密哈希值 我知道固定盐和静脉注射根本不推荐 但为了简单起见并为了理解问题 我将盐和IV保留为 0000000000000000
  • Android 列表选择器在自定义列表视图中不可见

    我制作了一个包含图像和文本视图的自定义列表 设置样式时 选择器不可见 使用 setTheme R style rose 调用样式 在 Listactivity 的 create 方法中作为第一次调用 但是 如果没有颜色用作背景 或样式中的背
  • 如何检查元素是否在屏幕外

    我需要使用 jQuery 检查 DIV 元素是否没有脱离屏幕 这些元素是可见的 并根据 CSS 属性显示 但可以通过以下方式故意将它们放置在屏幕外 position absolute left 1000px top 1000px 我无法使用
  • Jquery .live() 事件在 Firefox 和 IE 上不起作用

    我有现场活动 需要提交并点击
  • Swagger 对象数组

    我在 swagger 方面遇到了一些问题 我在 yaml 文件中以这种方式描述了一组对象 地址 Address properties street type string city type string state type string
  • Bootstrap 3 使用 Javascript 在页面加载时打开下拉菜单

    我似乎无法在页面加载时打开此下拉菜单 有人可以帮忙吗 Bootrap 3 的文档在这里 http getbootstrap com javascript dropdowns 我尝试过 但似乎不起作用 myDropdown dropdown
  • 用于 Javascript 的 .tiff 库

    有没有类似的图书馆画布2图像 请查看createBMP函数 在JavaScript 浏览器或nodejs 中制作 tiff 本机浏览器对 tiff 文件的支持仍然很差 维基百科对浏览器有很好的概述图片格式支持 话虽如此 由于 tiff 图像
  • (未知):#2514:获取脚本时发生未知错误。 [服务人员]

    这是控制台上的内容 unknown 2514 An unknown error occurred when fetching the script Service Workers 当服务工作人员接管或跳过等待并且我在网络关闭的情况下重新加载
  • GnuPlot 中的线图,其中线宽是我的数据文件中的第三列?

    我有一个包含三列的数据文件 1 1 0 1 2 1 5 2 3 0 0 3 4 1 2 2 5 5 1 0 1 6 1 1 5 其中第一列是我的 X 值 第二列是我的 Y 值 第三列是线宽 我希望根据第三列线宽绘制每个线段 I tried
  • 升级到Xcode 10后出现问题:找不到构建输入文件

    我昨晚将 Xcode SDK 升级到版本 10 然后发现无法构建 我收到此错误 找不到构建输入文件 Users call01 Library Developer Xcode DerivedData Comp Lite Apps gytvmo
  • 如何在Python中使用turtle模块播放GIF?

    我想让 GIF 在海龟屏幕上播放 但它只显示静态图像 请解决这个问题 任何帮助将不胜感激 这是我的代码 import turtle import os resources bgpic r C Users intel Desktop xBDT
  • 以编程方式检测 iPhone 中的 Sim 卡是否可用

    您好 我正在使用 SMSComposer 想要从地址簿中向联系人发送短信 我想检测我的 iPhone 中是否有 SIM 卡 我有什么办法可以达到这个目的吗 我尝试了 REachability Classes 但它为您提供了有关 WWAN 和
  • 使用自定义选择颜色和边框创建分组 UITableviewCell

    我目前正在编写一个应用程序 它在分组表视图中使用不同的选择颜色 就边界而言 这非常有效 我可以使用这篇文章中的代码更改选择颜色 如何自定义分组表视图单元格的背景 边框颜色 BUT我还想在苹果使用的单元格周围添加漂亮的边框 我该如何使用这个边
  • 无法安装 HTTPBuilder

    我正在尝试安装HTTPBuilder像这样 Grab group org codehaus groovy modules http builder module http builder version 0 7 2 但是 我收到此错误 ja
  • 如何从像素缓冲区创建 Win32 HBITMAP

    我尝试从像素缓冲区创建 HBITMAP 并显示它 这是我创建 HBITMAP 的代码 char buffer 640 480 3 memset buffer 255 640 480 3 BITMAPINFO bm sizeof BITMAP
  • Django 查询集匹配所有相关对象

    假设我有一个从 Coconut 到 Swallow 的外键 即 一只燕子携带了许多椰子 但每个椰子只被一只燕子携带 现在假设我有一个从 husk segment 到 Coconut 的外键 现在 我有一个 husk segments 列表
  • 整数太大[重复]

    这个问题在这里已经有答案了 嗨 我无法理解为什么这不起作用 if Long parseLong morse 4545454545 System out println 2 其中莫尔斯只是一串数字 问题是它说整数太大 4545454545 但
  • 如何从 CSV 中提取命名列?

    我有一个包含大约 50 列的 csv 文件 但我只需要其中大约 10 列 我希望能够从该 csv 文件中提取所需的列到新的 csv 文件中 这篇文章的最佳答案如何删除 CSV 文件中的列 看起来它会完全满足我的需要 但这是我每天都需要做的事
  • 使用 GET 的 MVC AttributeRouting - 返回 405 - 不允许的方法

    我刚刚在研究一种新的控制器操作方法 我有点困惑为什么会看到 405 我已经在我的 API 上定义了几个 GET 属性方法 它们都按预期运行 举个例子 这工作得很好 GET entries page JsonExceptionFilter p
  • 与绘图线一起创建标签

    我问了一个有关自定义小部件的问题 但对我是否需要它以及应该如何进行感到困惑 我目前有这门课 public class GUIEdge public Node node1 public Node node2 public int weight