Como usar variável de outra classe

Eu criei duas classes, e chamei de Primeira.class e Segunda.class. Eu preciso usar em uma classe, uma variável X que está em outra classe, e não sei fazer a referência a isso.

Na Primeira.class eu digito um valor em uma JTextField, capturo esse valor em uma String, converto essa String para uma double X. Veja como eu fiz o código da Primeira.class:

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

public class Primeira extends JFrame implements ActionListener
{
  
  JTextField T2;
  JButton B3, B4;
  
  public static void main(String[] args)
  {
   JFrame Janela = new Primeira();
   Janela.setVisible(true);
   
   WindowListener x = new WindowAdapter() 
     {
        public void windowClosing(WindowEvent e)
          {
             System.exit(0);
          }
     };
   Janela.addWindowListener(x);
}    

  public Primeira()
   {
      setTitle("Título da janela");	
      setSize(280,200);
      getContentPane().setLayout(new FlowLayout());
   
      T2 = new JTextField(" ");
      B3 = new JButton("Confirma");
      B4 = new JButton("Sair");

      getContentPane().add(T2); 
      getContentPane().add(B3); 
      getContentPane().add(B4);

      B3.addActionListener(this);
      B4.addActionListener(this);
   }                                                 

   public void actionPerformedd(KeyEvent e) 
     {
         if (e.getSource() ==B3)
          {  
              String valor = T2.getText();
              double X = Double.parseDouble(valor);
          }
         
         if (e.getSource() ==B4)
          {  
            System.exit(0);
          }
      }
}

Agora eu tenho uma outra classe, a Segunda.class, que vai precisar usar essa variável double X. Na Segunda.class eu digito um valor numérico em uma JTextField(T1), ao clicar no JButton (B1), capturo esse valor em uma String, converto esse valor para uma double A, crio uma double B que multiplica a double A por 0.18 (ou seja, calcula 18% de A), e preciso criar uma double C que multiplique a double B por aquela double X que foi criada na Primeira.class. Mas eu não sei fazer referência para poder usar uma variável que esteja em outra classe. Veja meu código desta Segunda classe.

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

public class Segunda extends JFrame implements ActionListener
{
  
  JTextField T1;
  JButton B1, B2;
  
  public static void main(String[] args)
  {
   JFrame Janela = new Segunda();
   Janela.setVisible(true);
   
   WindowListener x = new WindowAdapter() 
     {
        public void windowClosing(WindowEvent e)
          {
             System.exit(0);
          }
     };
   Janela.addWindowListener(x);
}    

  public Segunda()
   {
      setTitle("Título da janela");	
      setSize(280,200);
      getContentPane().setLayout(new FlowLayout());
   
      T1 = new JTextField(10);
      getContentPane().add(T1); 

      B1 = new JButton("Calcula");
      B1.addActionListener(this);
      getContentPane().add(B1);

      B2 = new JButton("Abre a Primeira");
      B2.addActionListener(this);
      getContentPane().add(B2);  
   
   }                                                 

   public void actionPerformedd(KeyEvent e) 
     {
        if (e.getSource() ==B1)
         {  
            String st1 = T1.getText();
            double A = Double.parseDouble(st1);
            
            double B = A * 0.18;
            
            /* Aqui eu preciso criar uma variável C assim:
                    double C = B * X;
                mas acontece que a variável X está lá na 
                Primeira.class. Não sei fazer a referência a
                uma variável que está em outra classe.  */
                    
                 
               T1.setText(C);
         }

        if (e.getSource() ==B2)
         {  
            // Aqui eu preciso de uma rotina que abra a Primeira.class
            
         }
      }
}

Nesse final do código, quando eu clicar no JButtom (B2) eu desejo que abra a janela da Primeira.class, mas não sei fazer isto. Então, são dois problemas que não sei resolver. Se alguém puder me ajudar completando esse código aí acima, eu agradeço demais. Abraço a todos.
Marco

Seu codigo esta muito grande, muita pouca gente vai ter paciencia de ler…
mas pra vc acessar a variavel de outra classe faz o seguinte oh:

Classe 1

public class Classe1{
  String nome;
  int idade;
}

Classe 2

public class Classe2{
  public static void main(String arg[]) {
       Classe1 objetoClasse1 = new Classe1();
       system.out.println(" O Nome é: " +objetoClasse1.nome );
  
}

Abraços

1 curtida

Fabio,

Muito obrigado por sua ajuda. Realmente, você tem razão, ficou grande demais esse código que eu postei. Mas eu li sua resposta e fiz outro código pequeno, mas não está rodando. Na Classe1 eu coloquei uma double A no valor de 3.6.

class Classe1
{
   public static void main(String args[])
      {
         double A = 3.6;
          System.out.println("Valor de A = " + A);
      }
}   

Na Classe2 eu c oloquei uma double quant= 2.4, criei um novo objeto da Classe1, que chamei de valor, e tentei criar uma variável double preco pegando o A lá da Classe1, e em seguida criei uma double D que multiplica quant * preco. Mas não está compilando.

class Classe2
{
public static void main(String args[])
{
double quant = 2.4;

     Classe1 valor = new Classe1();
     double preco = valor.A ;
     double D = quant * preco;

      System.out.println("Valor de D = " + D);
  }

}

Continuo a precisar da ajuda de vocês.
Marco

MarcoSenn, vc tem que declarar sua varíavel, fora do método main…

Faz assim oh:

class Classe1
{
   double A = 3.6;  
   public static void main(String args[])
      {
      
          System.out.println("Valor de A = " + A);
      }
}    

:)…
abraços

[code]import java.awt.;
import java.awt.event.
;
import javax.swing.*;

public class Primeira extends JFrame implements ActionListener
{

public double X;

JTextField T2;
JButton B3, B4;

public static void main(String[] args)
{
JFrame Janela = new Primeira();
Janela.setVisible(true);

WindowListener x = new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
};
Janela.addWindowListener(x);
}

public Primeira()
{
setTitle(“Título da janela”);
setSize(280,200);
getContentPane().setLayout(new FlowLayout());

  T2 = new JTextField(" "); 
  B3 = new JButton("Confirma"); 
  B4 = new JButton("Sair"); 

  getContentPane().add(T2); 
  getContentPane().add(B3); 
  getContentPane().add(B4); 

  B3.addActionListener(this); 
  B4.addActionListener(this); 

}

public void actionPerformedd(KeyEvent e)
{
if (e.getSource() ==B3)
{
String valor = T2.getText();
X = Double.parseDouble(valor);
}

     if (e.getSource() ==B4) 
      {  
        System.exit(0); 
      } 
  } 

}[/code]

E ai amigo, a variável X agora foi declarada no topo da classe pode testar esse código que vai funcionar.
[size=“11”][color=“red”]* Editado: Lembre-se de utilizar BBCode em seus códigos - Ratinho[/color][/size] :joia:

Fabio,

Fiz o que você propôs, tirei a variável double A de dentro do método principal (main) e coloquei fora, exatamente como você sugeriu, mas deu o seguinte erro:

non-static variable A cannot be referenced from a static context
System.out.println("Valor de A = " + A);
1 error

Marco

Tenta colocar a variavel A = em minusculo(a)…
mas acho ki nao vai ter nada haver…
entao…
faz o seguinte…
na sua classe 2…
fazum metodo assim oh:

public float retornaValor(){
    Classe1 objClasse1 = new Classe1();
    return objClasse1.A;
}

E no seu void main…

preco = preco * retornaValor();
system.out.println("Valor = " + preco);

[quote=“MarcoSenn”]

non-static variable A cannot be referenced from a static context
System.out.println("Valor de A = " + A);
1 error

Marco[/quote]

este erro é pq vc esta tentando usar uma varivel dentro de um metodo estatico static void main. Se vc declarar a variavel como static o erro não vai mais ocorrer.

Lembre-se de que declarando a variável como sendo estático, todas as instâncias da sua classe vai compartilhar o mesmo valor :!:

Se você não quiser compartilhar, precisa instanciar a classe dentro do main (baseando no código do fabiozoroastro):

class Classe1 { double A = 3.6; public static void main(String args[]) { Classe1 cl = new Classe1(); System.out.println("Valor de A = " + cl.A); } }Como a variável A não é estática, você precisa instalar a classe dentro do main antes de referenciar a mesma.

Outro detalhe é que o código acima só funciona para classes dentro do mesmo package. Precisa definir a variável como “public” para que as outras classes fora do package consiga ter acesso.

Porém, acessar direto as variáveis de outras classes não é recomendado no mundo OO. O indicado é definir métodos de acesso como getters e setters:

[code]class Classe1
{
private double A = 3.6;

public double getA() { return A; }
public void setA(double val) { A = val; }

public static void main(String args[])
{
Classe1 cl = new Classe1();
System.out.println("Valor de A = " + cl.getA());
}
}[/code]

Abraços!

Ao Hide,

Em primeiro lugar, muito obrigado por sua ajuda, Hide, você me trouxe novas informações, assim como cada amigo das mensagens acima, cada um me trouxe um elemento novo, e eu sou muito agradecido a vocês.

Eu aprendi que as variáveis de instância têm que ser declaradas no topo da classe, fora de um método, e depois faz-se a declaração de um objeto e através dele se atribui um valor para a variável. O problema no meu caso é que eu só posso dar valor a variável double A, depois que clico em um JButton B1 que captura o valor que foi digitado em uma JTextField T1. Essa é uma questão a resolver.

A outra questão, é que em outra class, exemplo, na Classe2, ao clicar em um JButton B1 eu tenho que capturar o valor daquela double A lá da Classe1. É só isso o que eu preciso entender.


RESUMO DO MEU PROBLEMA

Na Classe1 eu digito um número em uma JTextField T1, esse número vai ser atribuido a uma double A, mas cujo valor só será reconhecido ao clicar em um JButton. Então eu uso ActionListener, e o método action Performed e dou um valor para a double A , ou seja, se o usuário digitou 3.6 na T1, eu capturo essa String e converto para uma double A;

A segunda etapa: na Classe2 eu preciso clicar em um JButton B2, capturar o valor daquela double A (da Classe1) e criar uma double C , que seja o dobro da double A ,assim, por exemplo:

Classe1 objeto = new Classe1();
double C = objeto.A * 2;

Na Classe2 tudo isso tem que ser feito quando o usuário clica no JButton B2.


É isso aí acima que eu preciso no meu aplicativo, mas estão faltando conhecimentos de minha parte, mas eu estou estudando, e com a ajuda de vocês, espero resolver. Quem souber criar essas duas classes, a Classe1 e a Classe2, que faça apenas isso, me ajudaria muito. Veja bem que na Classe1 só tem que ter uma JTextField e um JButton, e na Classe2 só precisa ter um JButton, mais nada, no código do clique no JButton é que faz tudo.

Se não puderem fazer, sem problemas, porque já me ajudaram muito com as dicas de vocês. Abraços para todos.
Marco