我从未创建过GUI或使用Java绘图做任何事情,我需要帮助有效地绘制线条。在我的应用程序中,将为用户提供8个按钮,并且想法是当按下按钮时,应该在窗口上绘制与按下按钮的时间对应的线。目前我正在覆盖jpanel上的paintComponent函数,并且每隔125ms调用一次paint()函数(我只有~240像素的宽度可以绘制,我希望在240px上保持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)
最后我有一个定时器,每125ms调用一次jpanel1.paint()。
有更好的方法可以做到这一点,还是有人有任何其他建议?请提供详细的信息/来源,因为我没有任何真正的绘图经验。提前谢谢!
答案 0 :(得分:0)
覆盖JPanel的paintComponent函数
public void paintComponent(Graphics g) {
super.paintComponent(g)
g.drawLine(this.x1, this.y1, this.x2, this.y2);
}
答案 1 :(得分:0)
您应该不手动调用paint
或paintComponent
方法。
为了获得更好的效果,您可以在每125毫秒后在面板上invalidate()
之后尝试repaint()