[求助]预览选中的颜色为什么必须要实现paintComponent(Graphics g)方法?
请教~调用JColorChooser.setPreviewPanel(new PrePanel());方法class PrePanel extends JPanel
{
PrePanel()
{
this.setPreferredSize(new Dimension(300,100));
this.setBorder(BorderFactory.createRaisedBevelBorder());
}
public void paintComponent(Graphics g) //为什么要必须实现这个方法才能显示出选中的颜色?这方法是被谁调用的?
{
Dimension size = getSize();
g.setColor(getForeground());
g.fillRect(0,0,size.width,size.height);
}
}
---------------------
----------------解决方案--------------------------------------------------------
这个paintComponent()叫做回调方法,不是由你自己去用的.
事实上paintComponent()是由paint()方法调用的,而paint()方法是由EDT(Event dispatching Thread)调用.
不知道你的Swing与Graphics2D学到什么程度了.
其实你只要知道setPreviewPanel的工作原理,也不是一定要去覆写paintComponent方法的.
比如这样应该也可以实现楼主代码的同样效果:
程序代码:
class PrePanel extends JPanel{
PrePanel(){
setPreferredSize(new Dimension(300,100));
set...
}
public void setForeground(Color c){
setBackground(c);
}
}
ps:我其实没用过JColorChooser,上面的代码我也是根据JAVA API DOCS的说明随手写的,没有测试过,不能保证完全没错.
----------------解决方案--------------------------------------------------------
谢谢,你说的很详细了...但我不是太明白原理..
只要是GUI方面的我都没学过...现在自己慢慢学呢...
谢谢Eastsun
----------------解决方案--------------------------------------------------------
能否推荐我一本学习Swing与Graphics2D方面能入门的书
----------------解决方案--------------------------------------------------------
这个,我觉得Core Java 2 里面对Swing与Graphics2D讲的还不错的.
个人感觉最好的还是SUN官方网站上的Swing tutorial了.
[此贴子已经被作者于2007-3-3 11:54:19编辑过]
----------------解决方案--------------------------------------------------------
very 谢谢!
我去好好看看....
----------------解决方案--------------------------------------------------------