解决常见图像问题
问题: 我不知道将我的绘图代码放在什么地方。
任何从JComponent派生的组件的绘图代码应该属于paintComponent 方法。参看 自定义绘图概览获得具体信息。
问题: 我绘制的材料没有显示出来。
先检查你的组件是否显示了。 解决常见组件问题 将帮助你解决这个问题。
问题: 我的applet的背景显示出来了,但是前景内容没有显示出来。
你是否误解了在一个JApplet子类中直接绘图呢?假如是的话,那么你的内容会被为每个JApplet实例自动创建的内容面板(content pane)遮盖。作为替代,创建执行绘图的另一个类,然后将它加入JApplet的内容面板。参看 绘图 得到Swing中的绘图如何工作的更多信息。
问题: 我的组件的前景显示了,但是背景不可见。结果是在我的组件下面的一个或者多个组件变得可见,而这不是我期望的。
确保你的组件是不透明的。例如 JPanel缺省情况下是不透明的。要想使得其它组件,例如JLabel不透明,你必须对它们调用 setOpaque(true) 。
假如你的自定义组件扩展 JPanel或者一个更非凡的 JComponent 派生组件,那么你可以在绘制你的组件的自己的内容前通过调用 super.paintComponent 绘制背景。
你可以自己绘制背景,在paintComponent方法的最上面使用下面的代码:
g.setColor(getBackground());
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(getForeground());
问题: 我使用setBackground设置组件的背景色,但是它似乎不起作用。
很可能你的组件没有绘制背景,要么是因为它是透明的,要么是你的自定义绘制代码没有绘制背景。例如,假如你为JLabel设置背景色,你必须也调用setOpaque(true)使得标签的背景被绘制。更多帮助,请参看前面的问题。
问题: 我使用和指南的范例中一样的代码,但是它不能工作。为什么?
代码是否在和指南的范例中一样的方法中?例如,假如指南的范例的代码在 paintComponent 方法中,那么这个方法可能是代码保证可以工作的唯一的地方。
问题: 我如何绘制粗线?图案?
JavaTM 2D API提供实现带宽度和式样的直线以及填充和绘制外形这样的图案的扩展支持。参看 2D图形 教材获得使用Java 2D API的更多信息。
假如你在上面的列表中没有找到你的问题,参看 解决常见组件问题 和 解决常见图层问题。