Странные цвета + Java + JColorChooser - PullRequest
0 голосов
/ 21 февраля 2010
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);
    }
}

Создает окно, метод «рисует», рисует первый прямоугольник, после создает окно выбора цвета, я выбираю цвет (красный) и рисую второй прямоугольник ... черный Зачем?

Ответы [ 3 ]

2 голосов
/ 21 февраля 2010

Метод рисования компонента вызывается, когда свинг определяет, что его нужно перекрасить.

Так что, вероятно, происходит то, что paint () вызывается, как только Frame создается и отображается. На этом этапе цвет графики оказывается черным.

Затем вы устанавливаете цвет и вызываете «drawRect» для графического объекта. Ничего не происходит, потому что вы не в методе рисования. В какой-то момент в будущем Swing определяет необходимость перекрасить фрейм и вызывает его метод с недавно инициализированным графическим объектом. Это цвет по умолчанию черный. Вы получите еще один черный прямоугольник.

Решение состоит в том, чтобы добавить поле к вашему объекту Fr. "rectangleColor", например. Ваш JColorChooser должен обновить это поле. Когда вызывается рисование Fr, оно должно ссылаться на это свойство для установки цвета графики.

Если вы хотите заставить компонент перерисовывать себя, вы должны вызвать для него метод repaint ().

Наконец, нет смысла устанавливать gr = getGraphics(). У вас уже есть инициализированный объект Graphics, переданный вам в методе рисования.

1 голос
/ 21 февраля 2010

Вы никогда не должны переопределять метод paint () JFrame.

Прочтите секту из учебника по Swing на Custom Painting , чтобы ознакомиться с примерами пользовательской живописи.

0 голосов
/ 21 февраля 2010
import javax.swing.*;
import java.awt.*;


public class Fr extends JFrame{
    private static Color c=new Color(0,0,0,0);
    Fr(String s){
        super(s);
        setSize(200,300);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }
        public void paint(Graphics gr){
            gr.fillRect(50, 50, 20, 20);
            gr.setColor(c);
            gr.fillRect(100,100,20,20);
        }
    public static void main(String[] args){
    Fr f=new Fr("Window");
    c=JColorChooser.showDialog(null,"Color",null);
    f.repaint();
    }
}

спасибо за парня из Торонто =)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...