Fala grande…
Então para sua última pergunta vou te passar alguns links pra vc estudar e tirar sua própria opinião.
Além do mais se estivesse explicando poderia apenas estar transcrevendo de onde li, então porque não passar logo a fonte??!!
http://www.inf.ufes.br/~vsouza/files/JavaBasico08.pdf
http://www.argonavis.com.br/cursos/java/j100/java_16.pdf
A princípio pra mim só é interessante utilizar classes internas quando for muito necessário, senão prefiro cada uma no seu arquivo, questão de gosto.
Para “//PRECISO CHAMAR O METODO HABILITAR_BOTAO() QUE ESTA NA CLASSE JANELA, COMO FACO ISSO?” preciso entender uma coisa, qual classe vai ser instanciada primeiro: MeuSocket ou Janela?? Como está o fluxo de execução da aplicação. Está confuso…tipo: já há uma instância da classe Janela quando for feito esse thread para MeuSocket??
import java.awt.Dimension;
import java.awt.Rectangle;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Janela{
private JFrame jFrame = null;
private JPanel jContentPane = null;
private JButton jButton = null;
public Janela(){
getJFrame();
}
/**
* This method initializes jFrame
*
* @return javax.swing.JFrame
*/
private JFrame getJFrame() {
if (jFrame == null) {
jFrame = new JFrame();
jFrame.setSize(new Dimension(293, 169));
jFrame.setTitle("Janela");
jFrame.setContentPane(getJContentPane());
}
return jFrame;
}
/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(null);
jContentPane.add(getJButton(), null);
}
return jContentPane;
}
/**
* This method initializes jButton
*
* @return javax.swing.JButton
*/
private JButton getJButton() {
if (jButton == null) {
jButton = new JButton();
jButton.setBounds(new Rectangle(95, 60, 100, 33));
jButton.setEnabled(false);
}
return jButton;
}
public void habilitarBotao() {
if(jButton.isEnabled())
jButton.setEnabled(false);
else
jButton.setEnabled(true);
}
public static void main(String[] args) {
Janela janela = new Janela();
Thread TJanela = new Thread(janela);
TJanela.start();
MeuSocket socket= new MeuSocket();
Thread TMeuSocket = new Thread(socket);
TMeuSocket.start();
}
}
class MeuSocket implements Runnable {
public void run() {
boolean isHABILITAR_BOTAO = false;
while( true ) {
dado = socket.receberDado();
if( dado == "HABILITAR_BOTAO" ) {
setEnabledBotao();
}
}
}
}
Usando classe interna…Parece ser a solução mais ágil para o seu caso
Mas ainda não sei se é isso que vc está querendo…
[]'s