【发布时间】:2015-05-07 14:43:03
【问题描述】:
我正在尝试使用我制作的 Painter 对象在我的 JTable 上画线,但由于某种原因 table.getGraphics() 返回 null。
画家类:
import java.awt.BasicStroke;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JTable;
public class Painter extends JTable {
public Painter(){
}
public void paintSudokuLines(Graphics g){
paintComponent(g);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setStroke(new BasicStroke(3));
g2.drawLine(0, 300, 400, 250);
}
}
我正在调用该方法:
private Painter paint = new Painter();
paint.paintSudokuLines(table.getGraphics());
我不知道为什么会这样,所以我需要一些解释。
【问题讨论】:
-
简单规则。不要使用
getGraphics,也不要自己打电话给paintComponent。这不是 Swing 中绘画的工作方式 -
table定义在哪里? -
@GargAnkit
getGraphics可以返回null如果组件未附加到可显示的本机对等点。基本规则是,永远不要尝试在 Swing 中进行自己的绘画,在 Swing 的绘画更新中进行相应的工作。抱歉,表格的定义位置与任何可能的答案都无关,因为他们的 OP 从根本上违反了绘画规则 -
坦率地说,我对 Swing 无动于衷。我只是想帮助 OP,作为开发人员,
table似乎未定义! -
@GargAnkit 我们感谢您的帮助,但在这里,它只是无关紧要
标签: java swing jtable line paint