【问题标题】:Best way to draw lines javajava画线的最佳方法
【发布时间】:2012-12-16 13:06:49
【问题描述】:

我从未创建过 GUI 或用 Java 绘制任何东西,我需要帮助以有效地绘制线条。在我的应用程序中,将为用户提供 8 个按钮,其想法是当按下按钮时,应在窗口上绘制一条与按下按钮时间相对应的线。目前我正在覆盖 jpanel 上的 paintComponent 函数,并每 125 毫秒调用一次 paint() 函数(我只有大约 240 像素宽可以绘制,我想在 240 像素上保留 30 秒的记录),但是它正在运行的硬件无法跟上,它看起来很糟糕/非常不稳定。这是我正在使用的代码:

jPanel1 = new javax.swing.JPanel() {
  protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    Something cur = manager.getSomething(getCurrentState());
    for(int j=0; j<cur.getNumItems(); j++) {
      Item i1 = cur.getItem(j);
      for(int i = 0; i<i1.getLength(); i++) {
        int start = i1.getStartTime(i);
        int len = Math.max(0, (Math.min(i1.getStopTime(i), pix) - start));
        g.fillRect(start,j*22+5,len,5);
      }
    }
    g.drawLine(pix, 0, pix, 170);
  }
};

在哪里: getItem(int) 将返回给定按钮的信息。 getStartTime(int) 将返回按下按钮时给定时间段的开始时间。 getStopTime(int) 将返回按下按钮时给定时间段的停止时间。 pix = 我们在面板上的当前像素(因此,如果我们在时间轴的 30 秒内 15 秒,pix 将等于 120)

最后我有一个计时器,它每 125 毫秒调用一次 jpanel1.paint()。

有没有更好的方法来做到这一点,或者有人有其他建议吗?请提供详细的信息/来源,因为我没有任何真正的绘图经验。提前致谢!

【问题讨论】:

  • 你试过的代码在哪里?
  • 你能参考一下这个教程吗???如果你读了这么多,我认为这已经足够了:) beginwithjava.blogspot.in/2008/07/…
  • "目前我正在覆盖 jpanel 上的 paintComponent 函数,并且每 125 毫秒调用一次该函数" 您不应该手动调用 paintComponent 方法
  • @vishal_aim 我已经添加了我正在使用的代码。让我知道这是否没有意义。另外,我弄错了,我调用的是paint函数,我理解的是调用paintComponent函数。
  • 即使你不应该调用paint,请检查我的答案

标签: java drawing2d


【解决方案1】:

覆盖 JPanel 的 paintComponent 函数

public void paintComponent(Graphics g) {
        super.paintComponent(g)

        g.drawLine(this.x1, this.y1, this.x2, this.y2);
    }

【讨论】:

  • 他已经重写了这个方法(有问题提到)
  • 正如 vishal_aim 所说,我已经这样做了,并更新了我的帖子以显示我正在使用的代码。
【解决方案2】:

您应该手动调用paintpaintComponent 方法。

为了获得更好的结果,您可以在每 125 毫秒后在面板上尝试 invalidate() 和之后的 repaint() 方法

你可能也对repaint and invalidate感兴趣

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-30
    • 2012-04-30
    • 2013-09-02
    • 1970-01-01
    • 2011-08-16
    • 2010-10-11
    • 1970-01-01
    相关资源
    最近更新 更多