2015-08-22 3 views
0

У меня есть простой JPanel до сих пор и некоторые базовые элементы, такие как строка для отображения, прямоугольник и JButton, все на этой панели. Когда я нажимаю мышью на этой панели, я хочу, чтобы вещи, которые используют собственный цвет «rainbowColor», меняют свой цвет именно на этот цвет (строка и прямоугольник).Изменение атрибута JComponent

int red = 0; 
int green = 255; 
int blue = 0; 
Color rainbowColor = new Color(red, green, blue); 
boolean whichColor = true; 

if (whichColor) { red = 255; blue = 0; whichColor = false; } 
else { red = 0; blue = 255; whichColor = true; } 

Мой «ТЕКСТ», кажется, постоянно зеленый, независимо от того, нажимаю ли я панель. По крайней мере, это означает, что код работает в некотором роде. Я до сих пор не понимаю: в коде говорится, что для параметра «whichColor» установлено значение true, поэтому он должен установить «красный» на 255. В этом случае важна только часть «paintComponent {...}». Я действительно не знаю, что я сделал не так, большое спасибо за то, что помог мне!

package game; 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 



public class Menu extends JPanel { 

     public void paintComponent(Graphics g) { 

       int margin = 4; 
       int red = 0; 
       int green = 255; 
       int blue = 0; 
       Color rainbowColor = new Color(red, green, blue); 
       boolean whichColor = true; 

       if (whichColor) { red = 255; blue = 0; whichColor = false; } 
       else { red = 0; blue = 255; whichColor = true; } 

      super.paintComponent(g); 
      Font customFont = new Font("Dialog", Font.BOLD, 20); 
      g.setFont(customFont); 
      g.setColor(new Color(0,0,0)); 
      g.drawString("TEXT", 20, 30); 
//  randomiseColor(randomColor); 
      g.setColor(rainbowColor); 
      g.drawString("TEXT", 22, 32); 
      g.drawRect(margin, margin, getWidth() - margin*2 - 1, getHeight() - margin*2 - 1); 
     } 

    } 

public static class RandomColorOnClick implements MouseListener { 

     public void mousePressed(MouseEvent evt) { 
      Component source = (Component)evt.getSource(); 
      source.repaint(); 
     } 

     public void mouseClicked(MouseEvent evt) { } 
     public void mouseReleased(MouseEvent evt) { } 
     public void mouseEntered(MouseEvent evt) { } 
     public void mouseExited(MouseEvent evt) { } 

    } 

public static void main(String[] args){ 

    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 

    double width = screenSize.getWidth(); 
    double height = screenSize.getHeight(); 

    RandomColorOnClick colorListener = new RandomColorOnClick();  
    ButtonHandler listener = new ButtonHandler(); 

    Menu main_text = new Menu(); 
    JPanel main_content = new JPanel(); 
    JFrame main_window = new JFrame("Some random text"); 
    JButton main_exit_button = new JButton("Exit"); 

    main_content.addMouseListener(colorListener); 

    main_window.setContentPane(main_content); 
    main_window.setSize(800, 600); 
    main_window.setLocation(((int)width/2) - 400, ((int)height/2) - 300); 
    main_window.setVisible(true); 
    main_window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    main_content.setLayout(new BorderLayout()); 
    main_content.add(main_text, BorderLayout.CENTER); 

    main_exit_button.addActionListener(listener); 




} 

ответ

1

есть 2 проблемы

1) вы должны создать boolean whichColor=true; внутри метода paintComponent()(); поэтому каждый раз, когда он рисует графику, он создает переменную whichcolor, и она всегда верна. Создайте ее вне метода paintcomponent в качестве переменной экземпляра.

2) создание цветовой переменной перед изменением цветов. Вы создаете переменную цвета, но вы меняете цвет после того, как цветовая переменная that.so остается неизменной. Color rainbowColor = new Color(red, green, blue); . Именно поэтому он всегда зеленый. вы и перемещаете линию создания цвета после условия if-else. Но вы можете объявить ее снаружи и изменить цвет, а не создавать снова и снова.

вот пример ...

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class Menu extends JPanel { 

    private boolean whichColor = true; 
    private Color rainbowColor; 

    public void paintComponent(Graphics g) { 

     int margin = 4; 
     int red = 0; 
     int green = 255; 
     int blue = 0; 

     if (whichColor) { 
      red = 255; 
      blue = 0; 
      whichColor = false; 
     } else { 
      red = 0; 
      blue = 255; 
      whichColor = true; 
     } 
     rainbowColor = new Color(red, green, blue); 
     super.paintComponent(g); 
     Font customFont = new Font("Dialog", Font.BOLD, 20); 
     g.setFont(customFont); 
     g.setColor(new Color(0, 0, 0)); 
     g.drawString("TEXT", 20, 30); 
//  randomiseColor(randomColor); 
     g.setColor(rainbowColor); 
     System.out.println(rainbowColor); 
     g.drawString("TEXT", 22, 32); 
     g.drawRect(margin, margin, getWidth() - margin * 2 - 1, getHeight() - margin * 2 - 1); 

    } 

    public static void main(String[] args) { 

     Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 

     double width = screenSize.getWidth(); 
     double height = screenSize.getHeight(); 

     RandomColorOnClick colorListener = new RandomColorOnClick(); 
     ButtonHandler listener = new ButtonHandler(); 

     Menu main_text = new Menu(); 
     JPanel main_content = new JPanel(); 
     JFrame main_window = new JFrame("Some random text"); 
     JButton main_exit_button = new JButton("Exit"); 

     main_content.addMouseListener(colorListener); 

     main_window.setContentPane(main_content); 
     main_window.setSize(800, 600); 
     main_window.setLocation(((int) width/2) - 400, ((int) height/2) - 300); 
     main_window.setVisible(true); 
     main_window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     main_content.setLayout(new BorderLayout()); 
     main_content.add(main_text, BorderLayout.CENTER); 

     main_exit_button.addActionListener(listener); 
    } 

} 

class RandomColorOnClick implements MouseListener { 

    public void mousePressed(MouseEvent evt) { 
     Component source = (Component) evt.getSource(); 
     source.repaint(); 
    } 

    public void mouseClicked(MouseEvent evt) { 
    } 

    public void mouseReleased(MouseEvent evt) { 
    } 

    public void mouseEntered(MouseEvent evt) { 
    } 

    public void mouseExited(MouseEvent evt) { 
    } 

} 
+0

Извините за мой поздний ответ. Большое спасибо Fast Snail, с вашей помощью я мог это понять – Hydraxia

0

Вы не инициализирован объект цвет после изменения значения красного, синего, зеленого переменных. Получить цветной объект снова инициализирован, если вы меняете значения красных синих зеленых переменных ...

+0

Спасибо, мистер Нодди – Hydraxia

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