Ajuda com variavel do tipo Color

Eu to tentando editar a cor de fundo do meu programa, com o usuario entrando com a quantidade de vermelho, verde e azul (r,g,b)

Eu as variaveis do tipo int assim:

public static int r, g, b;

E minha variavel color assim:

public static Color coredF = new Color (r , g ,b);

Se eu crio elas assim, tudo bem, nenhum erro. Mas o netbeans me volta um warning: “Uso de variavel estatica nao final durante a inicialização”

Isso eu entendi, as variaveis r, g, b tem que ser declaradas como final. Mas ai eu nao posso editar elas. Por exemplo:

botao1.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ r = Integer.parseInt(redF.getText()); g = Integer.parseInt(greenF.getText()); b = Integer.parseInt(blueF.getText()); }

Clicando no botao1 as variaveis r, g, b receberiam os valores dos respectivos textfields. Mas se eu faço isso, sem declara-las final, o netbeans volta o seguinte erro:

Exception in thread “AWT-EventQueue-0” java.lang.NumberFormatException: For input string: “”
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:470)
at java.lang.Integer.parseInt(Integer.java:499)
at wallpapers.Wallpaper$1.actionPerformed(Wallpaper.java:329)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6263)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6028)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Pelo que eu entendi é porque o valor “default” do textfield ta sendo declarado como “”;

Mais como eu resolvo isso? porque se eu declaro com algum numero ele nao da erro, mais nao muda a cor quando eu digito os valores.

Não declare nada como static.

Tenta assim:


    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
       int r = Integer.parseInt(jTextField_r.getText());
       int g = Integer.parseInt(jTextField_g.getText());
       int b = Integer.parseInt(jTextField_b.getText());
       jPanel1.setBackground(getColor(r, g, b));
    }

    private Color getColor(final int r, final int g, final int b){
        return new Color(r, g, b);
    }

As variaveis r, g, b nao eram para estar, foi mancada minha :stuck_out_tongue_winking_eye:

mais a variavel do tipo cor eu to chamando em outra classe dentro de um metodo (talvez o netbeans retorna o erro se ela nao é statica porque o metodo é um public void?)

Nada a ver o método ser public void. O ideal é postar o método com o problema para vermos o porque.

É esse o metodo que esta usando a variavel coredF. Esse metodo esta dentro da classe REL, que é um JPanel.

[code]public class REL extends JPanel {

public Rectangle2D r(){
    return new Rectangle2D.Double(Wallpaper.colunaRV,Wallpaper.linhaRV,Wallpaper.larguraRV,Wallpaper.comprimentoRV);
}
public Line2D l(){
    return new Line2D.Double(Wallpaper.colunaLV,Wallpaper.linhaLV,Wallpaper.larguraLV,Wallpaper.comprimentoLV);
}
public Ellipse2D e(){
    return new Ellipse2D.Double(Wallpaper.colunaEV,Wallpaper.linhaEV,Wallpaper.larguraEV,Wallpaper.comprimentoEV);
}

@Override

public void paintComponent(Graphics graphics)
{
super.paintComponent(graphics); // Invocando a execução do método paintComponent da super classe.

  Graphics2D g = (Graphics2D) graphics.create(); //Isso faz a cópia

  g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
  g.setRenderingHint(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY);

  if (Wallpaper.editarcorF.isSelected() == true){
      g.setColor(Wallpaper.coredF);
  } else if(Wallpaper.editarcorF.isSelected() == false){
      g.setColor(Wallpaper.corbg);
  }
  g.fillRect(0, 0, getWidth(), getHeight());

  Dimension size = getSize();
  double w = size.getWidth();
  double h = size.getHeight();
  
  g.setStroke(new BasicStroke(3));
  g.setColor(Wallpaper.corl);
  
     AffineTransform at =
     AffineTransform.getTranslateInstance(w / 2, h / 2);
     g.draw(at.createTransformedShape(l()));
     g.draw(at.createTransformedShape(r()));
     g.draw(at.createTransformedShape(e()));
     
 g.dispose();

} [/code]

Se eu removo o Static na declaraçao da variavel coredF, ele fala que a varial nao-estatica nao pode ser usada num contexto estatico :S

Static é uma péssima forma de trocar dados entre classes.

Passe um objeto do tipo Wallpaper no construtor do seu JPanel e guarde-o numa variável:

[code]
public class REL extends JPanel {
private Wallpaper wp;

public REL(Wallpaper owner) {
this.wp = owner;
}

}[/code]

E então simplesmente usar wp.getEditarcorF();

Note que também sugiro que vc crie um getter ao invés de simplesmente declarar a variável como public.

[quote=ViniGodoy]Static é uma péssima forma de trocar dados entre classes.

Passe um objeto do tipo Wallpaper no construtor do seu JPanel e guarde-o numa variável:

[code]
public class REL extends JPanel {
private Wallpaper wp;

public REL(Wallpaper owner) {
this.wp = owner;
}

}[/code]

E então simplesmente usar wp.getEditarcorF();

Note que também sugiro que vc crie um getter ao invés de simplesmente declarar a variável como public.[/quote]

O Jpanel REL ta dentro do jframe REL. Se eu coloco “public REL(Wallpaper owner) { this.wp = owner; }” ,nao aparece nada no jpanel.

E editarcorF é um radio button, nao um metodo. Nao tem como chamar ele com wp.getEditarcorF(). E voce pode me explicar melhor sobre esse getter? Vou pesquisar aqui, mas sua ajuda é bem vinda