Graphics g = getGraphics();
НЕ так, как обычай рисовать.getGraphics
может вернуть null
и является не более чем снимком предыдущего прохода рисования, который будет заменен при следующем проходе рисования.
Начните с просмотра Выполнение пользовательской рисования и Рисование в AWT и Swing для получения более подробной информации о том, как рисование работает и как с ним работать.
У вас есть два варианта.Вы можете использовать BufferedImage
в качестве основной поверхности для рисования, а затем закрасить ее компонентом, или вы можете отслеживать, что было нарисовано (и каким цветом), и воспроизводить его каждый раз, когда происходит цикл рисования.У обоих есть свои плюсы и минусы, и то, что вы будете использовать, будет зависеть от ваших потребностей.
Чтобы ответить на ваш вопрос.Вам нужен какой-то способ передать новый цвет экземпляру Sketch
.
Я бы начал с создания сеттера в Sketch
, который можно использовать в других классах для изменения цвета ...
public Sketch() {
private Color drawColor = Color.BLACK;
public void setDrawColor(Color color) {
if (color == null) {
drawColor = Color.BLACK;
} else {
drawColor = colorl
}
}
Тогда вы будете использовать этот метод, чтобы передать ему новый цвет ...
public static void main(String[] args) {
JFrame frame = new JFrame("Simple Sketching Program");
JButton colorBtn = new JButton("Color");
Sketch sketch = new Sketch();
colorBtn.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
Color newColor = JColorChooser.showDialog(frame,"Choose Color",Color.BLACK);
if(newColor != null){
sketch.setDrawColor(newColor);
}
}
});
frame.getContentPane().add(new Sketch(), BorderLayout.CENTER);