奇怪的颜色+;Java+;颜色选择器
它创建一个窗口,方法“绘制”绘制第一个矩形在创建窗口颜色选择后,我选择颜色(红色)并绘制第二个矩形…黑色奇怪的颜色+;Java+;颜色选择器,java,swing,Java,Swing,它创建一个窗口,方法“绘制”绘制第一个矩形在创建窗口颜色选择后,我选择颜色(红色)并绘制第二个矩形…黑色 为什么? 当swing确定组件需要重新绘制时,将调用组件的绘制方法 因此,可能正在发生的是,在创建和显示帧时,会立即调用is paint()。此时图形颜色恰好为黑色 然后,设置颜色并在图形对象上调用“drawRect”。没有任何事情发生,因为您不在绘制方法中。在接下来的某个时刻,swing确定它需要重新绘制框架,并使用新初始化的图形对象调用它的方法。它的颜色设置为默认的黑色。你会得到另一个黑
为什么? 当swing确定组件需要重新绘制时,将调用组件的绘制方法 因此,可能正在发生的是,在创建和显示帧时,会立即调用is paint()。此时图形颜色恰好为黑色 然后,设置颜色并在图形对象上调用“drawRect”。没有任何事情发生,因为您不在绘制方法中。在接下来的某个时刻,swing确定它需要重新绘制框架,并使用新初始化的图形对象调用它的方法。它的颜色设置为默认的黑色。你会得到另一个黑色矩形 解决方案是向Fr对象添加一个字段。例如“矩形颜色”。您的JColorChooser应该更新此字段。调用Fr的paint时,它应该引用此属性来设置图形颜色 如果要强制组件重新绘制自身,则应该对其调用repaint()方法
最后,设置
gr=getGraphics()
毫无意义。您已经在绘制方法中传递了一个初始化的图形对象。当swing确定需要重新绘制组件时,将调用该组件的绘制方法
因此,可能正在发生的是,在创建和显示帧时,会立即调用is paint()。此时图形颜色恰好为黑色
然后,设置颜色并在图形对象上调用“drawRect”。没有任何事情发生,因为您不在绘制方法中。在接下来的某个时刻,swing确定它需要重新绘制框架,并使用新初始化的图形对象调用它的方法。它的颜色设置为默认的黑色。你会得到另一个黑色矩形
解决方案是向Fr对象添加一个字段。例如“矩形颜色”。您的JColorChooser应该更新此字段。调用Fr的paint时,它应该引用此属性来设置图形颜色
如果要强制组件重新绘制自身,则应该对其调用repaint()方法
最后,设置
gr=getGraphics()
毫无意义。您已经在paint方法中向您传递了一个初始化的图形对象。您不应该重写JFrame的paint()方法
请阅读上Swing教程中的章节,以获取有关自定义绘制的示例。决不应重写JFrame的paint()方法
import javax.swing.*;
import java.awt.*;
public class Fr extends JFrame{
Fr(String s){
super(s);
setSize(200,300);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void paint(Graphics gr){
gr=getGraphics();
gr.fillRect(50, 50, 20, 20);
}
public static void main(String[] args){
Fr f=new Fr("Window");
f.getGraphics().setColor(JColorChooser.showDialog(null,"Color",null));
f.getGraphics().fillRect(100,100,20,20);
}
}
请阅读上Swing教程中的章节,以获取有关自定义绘制的示例
import javax.swing.*;
import java.awt.*;
public class Fr extends JFrame{
Fr(String s){
super(s);
setSize(200,300);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void paint(Graphics gr){
gr=getGraphics();
gr.fillRect(50, 50, 20, 20);
}
public static void main(String[] args){
Fr f=new Fr("Window");
f.getGraphics().setColor(JColorChooser.showDialog(null,"Color",null));
f.getGraphics().fillRect(100,100,20,20);
}
}
谢谢多伦多的家伙=)
谢谢多伦多的家伙=)