2015-03-06 2 views
2

Итак, я пытаюсь нарисовать метку, содержащую значок, показывающий круг. Сначала кружок будет заполнен красным, а затем в зависимости от того, какая из 3 кнопок я нажимаю, он либо изменится на зеленый, синий или красный, используя перерисовку.Рисование метки, содержащей значок, показывающий круг

Вот то, что я до сих пор:

public class ColorChanger implements Icon { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     JFrame myFrame = new JFrame(); 
     JButton redButton = new JButton("Red"); 
     JButton greenButton = new JButton("Green"); 
     JButton blueButton = new JButton("Blue"); 
     Graphics g; 

     ColorChanger myCircle = new ColorChanger(); 
     final JLabel myLabel = new JLabel(myCircle); 

    // myCircle.paintIcon(myFrame, g, 50, 50); 

     final int FRAME_WIDTH = 300; 
     final int FRAME_HEIGHT = 200; 

     myFrame.setSize(FRAME_WIDTH, FRAME_HEIGHT); 
     myFrame.setLayout(new FlowLayout()); 

     myFrame.add(redButton); 
     myFrame.add(greenButton); 
     myFrame.add(blueButton); 
     myFrame.add(myLabel); 

     myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     myFrame.pack(); 
     myFrame.setVisible(true); 
    } 

    @Override 
    public int getIconWidth() { 
     // TODO Auto-generated method stub 
     return 10; 
    } 

    @Override 
    public int getIconHeight() { 
     // TODO Auto-generated method stub 
     return 10; 
    } 

    @Override 
    public void paintIcon(Component c, Graphics g, int x, int y) { 
     // TODO Auto-generated method stub 
     Graphics2D g2 = (Graphics2D) g; 
     Ellipse2D.Double circle = new Ellipse2D.Double(50, 50, 10, 10); 
     g2.setColor(Color.RED); 
     g2.fill(circle); 
    }  
} 

Мой вопрос, я понятия не имею, что пройти для графики г в PaintIcon. Есть ли другой способ сделать это? Я ценю любую помощь в этом.

+0

Значок будет автоматически нарисован 'JLabel', когда он будет обновляться ... – MadProgrammer

+0

[возможно, ярлык] (http://stackoverflow.com/q/14253786/714968) – mKorbel

+0

@MadProgrammer Но это не живопись. Я получаю 3 кнопки, чтобы показать, но теперь круг. – aurora91

ответ

4
Ellipse2D.Double circle = new Ellipse2D.Double(50, 50, 10, 10); 

Размер значка (10, 10). 50, находится за пределами значка. Картина сделана по отношению к иконе так эллипс должен быть:

Ellipse2D.Double circle = new Ellipse2D.Double(0, 0, 10, 10); 

это будет либо изменения в зеленый, синий, красный или с помощью перекрашивать.

Ваш класс ColorChanger будет нуждаться в методе setColor(Color color), чтобы вы могли динамически изменять цвет для окрашивания. Затем метод paintIcon() должен использовать этот цвет.

+2

@ aurora91, рад, что это помогло. Вы должны «принять» ответ, чтобы люди знали, что проблема решена. – camickr

+1

Сделано и сделано. Спасибо @AndrewThompson за ссылку. Я собираюсь быть честным, я не был уверен, где была кнопка «принять». – aurora91

Смежные вопросы