Swing Básico - Como conectar uma ação a um botão?

OK pessoal, já li o básico do swing e já fiz as primeiras janelinhas (bem feinhas, é verdade) mas não consigo achar um material que explique como eu conecto um botão a uma ação.

Bom, pra ser mais específico, meu problema é o seguinte.

Trabalho na facul. com Programas em FORTRAN90 (é eu sei que não é muito usado por vcs mas…) e quero passar alguns códigos para a linguagem Java (o que tem sido relativamente simples) mas quero ir mais além. Quero criar uma interface gráfica que interaja com o usuário. Um exemplo de problema é o seguinte:

Tenho um programa em Java que calcula o produto entre duas matrizes, o fato é que não quero que meu resultado sai no console (System.out.println) e sim dentro da interface gráfica que irei criar.
Como proceder? Alguma sugestão?

aqui no GUJ tem varios tutorias sobre Swing, o mais básico é esse:
http://www.guj.com.br/java.artigo.38.1.guj

mas vai na seção de tutoriais que vc encontra mais

[quote=Axel-Foley]aqui no GUJ tem varios tutorias sobre Swing, o mais básico é esse:
http://www.guj.com.br/java.artigo.38.1.guj

mas vai na seção de tutoriais que vc encontra mais[/quote]

Obrigado por responder tão rápido amigo, mas esse artigo eu já tinha lido e não ensina o que eu quero, apenas introduz o conceito do layout de um programa (criar os botões, as janelas).

no botao:

JButton bt = new JButton("resultado");
bt.addActionListener(
  new ActionListener()
  {
    public void actionPerformed(ActionEvent e)
    {
      labelResultado.setText("resultado: " + variavelComResultado);
    }
  }
);

Nao sei se entendi mais olhe este codigo ai talves te ajude;
import javax.swing.;
import java.awt.event.
;
import java.awt.*;
class PanelMatriz extends JPanel
{
static final int NODE_WIDTH = 40;
static final int NODE_HEIGHT = 20;
static final int ARC_WIDTH = 10;
static final int ARC_HEIGHT = 10;
protected int[][] matriz;

public PanelMatriz(int[][] matriz)
{
    setBackground(Color.white);
    setLayout(new GridLayout(1,1));
    this.matriz = matriz;
    
}
public void paint(Graphics g) 
{
      
      super.paint(g);
     
      for(int index1=0;index1 < matriz.length;index1++) 
      {
          for(int index2=0;index2 < matriz.length;index2++) 
          {       
                drawNode(g,30+(index1*(NODE_WIDTH+7)),30+(index2*(NODE_HEIGHT+7)),
                Integer.toString(matriz[index1][index2]));
          }
       }

 }
 public void drawNode(Graphics g, int x, int y, String label) 
 {
         g.setColor(new Color(255,255,204));
         g.fillRoundRect(x,y,NODE_WIDTH,NODE_HEIGHT,ARC_WIDTH,ARC_HEIGHT);
         g.setColor(Color.red);
         g.drawRoundRect(x,y,NODE_WIDTH,NODE_HEIGHT,ARC_WIDTH,ARC_HEIGHT);
         g.setColor(Color.black);
         Font mono = new Font("Monospaced",Font.BOLD,15);
         g.setFont(mono);
         FontMetrics newFM = g.getFontMetrics(mono);
         int xLength = newFM.stringWidth(label);
         g.drawString(label,(x+(NODE_WIDTH/2)-(xLength/2)),y+14);
  }

}
public class Janela2 extends JFrame implements ActionListener
{
private JButton bntSair,bntExecuta;
public Janela2()
{
super(“MinhaJanela”);
setSize(500,400);
Container c = getContentPane();
c.setLayout(new BorderLayout());
bntSair = new JButton(“Sair”);
bntExecuta = new JButton(“Executa”);
bntSair.addActionListener(this);
bntExecuta.addActionListener(this);
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(1,3,5,5));

    panel.add(bntSair);
    panel.add(new JLabel());
    panel.add(bntExecuta);
    c.add(new JLabel(),BorderLayout.CENTER);
    c.add(panel,BorderLayout.SOUTH);
    show();

}
public void actionPerformed(ActionEvent e)
{   
    if(e.getSource() == bntSair)
    {
        int escolha = JOptionPane.showConfirmDialog(null,"Deseja SAIR desta aplicaçao","",JOptionPane.YES_NO_OPTION);
        if(escolha == JOptionPane.YES_OPTION)
        {
           dispose();
        }   
    }
    if(e.getSource() == bntExecuta)
    {
        int[][] matriz = MetodoQueCalculaAMultiplicacaoDasMatriz();
        PanelMatriz panelMat = new  PanelMatriz(matriz);
        JFrame frame = new JFrame("Matriz");
        frame.setLocation(50,130);
        frame.setSize(400,300);
        Container c = frame.getContentPane();
        c.add(panelMat);
        frame.setResizable(false);
        frame.show();
        
        
    }
}
public int[][] MetodoQueCalculaAMultiplicacaoDasMatriz()
{
      int[][] matriz = new int[5][5];
      for(int index1=0;index1 < matriz.length;index1++) 
      {
          for(int index2=0;index2 < matriz.length;index2++) 
          {       
             if(index1 <index2)
                matriz[index1][index2] = 0;
             else
               matriz[index1][index2] = 1;
          }
      }
    return matriz;
}
public static void main()
{
   new Janela2();
}

}

OK aimgo. Vou tentar esse.

[quote=Carlos Martins]Nao sei se entendi mais olhe este codigo ai talves te ajude;
import javax.swing.;
import java.awt.event.
;
import java.awt.*;
class PanelMatriz extends JPanel
{
static final int NODE_WIDTH = 40;
static final int NODE_HEIGHT = 20;
static final int ARC_WIDTH = 10;
static final int ARC_HEIGHT = 10;
protected int[][] matriz;

public PanelMatriz(int[][] matriz)
{
    setBackground(Color.white);
    setLayout(new GridLayout(1,1));
    this.matriz = matriz;
    
}
public void paint(Graphics g) 
{
      
      super.paint(g);
     
      for(int index1=0;index1 < matriz.length;index1++) 
      {
          for(int index2=0;index2 < matriz.length;index2++) 
          {       
                drawNode(g,30+(index1*(NODE_WIDTH+7)),30+(index2*(NODE_HEIGHT+7)),
                Integer.toString(matriz[index1][index2]));
          }
       }

 }
 public void drawNode(Graphics g, int x, int y, String label) 
 {
         g.setColor(new Color(255,255,204));
         g.fillRoundRect(x,y,NODE_WIDTH,NODE_HEIGHT,ARC_WIDTH,ARC_HEIGHT);
         g.setColor(Color.red);
         g.drawRoundRect(x,y,NODE_WIDTH,NODE_HEIGHT,ARC_WIDTH,ARC_HEIGHT);
         g.setColor(Color.black);
         Font mono = new Font("Monospaced",Font.BOLD,15);
         g.setFont(mono);
         FontMetrics newFM = g.getFontMetrics(mono);
         int xLength = newFM.stringWidth(label);
         g.drawString(label,(x+(NODE_WIDTH/2)-(xLength/2)),y+14);
  }

}
public class Janela2 extends JFrame implements ActionListener
{
private JButton bntSair,bntExecuta;
public Janela2()
{
super(“MinhaJanela”);
setSize(500,400);
Container c = getContentPane();
c.setLayout(new BorderLayout());
bntSair = new JButton(“Sair”);
bntExecuta = new JButton(“Executa”);
bntSair.addActionListener(this);
bntExecuta.addActionListener(this);
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(1,3,5,5));

    panel.add(bntSair);
    panel.add(new JLabel());
    panel.add(bntExecuta);
    c.add(new JLabel(),BorderLayout.CENTER);
    c.add(panel,BorderLayout.SOUTH);
    show();

}
public void actionPerformed(ActionEvent e)
{   
    if(e.getSource() == bntSair)
    {
        int escolha = JOptionPane.showConfirmDialog(null,"Deseja SAIR desta aplicaçao","",JOptionPane.YES_NO_OPTION);
        if(escolha == JOptionPane.YES_OPTION)
        {
           dispose();
        }   
    }
    if(e.getSource() == bntExecuta)
    {
        int[][] matriz = MetodoQueCalculaAMultiplicacaoDasMatriz();
        PanelMatriz panelMat = new  PanelMatriz(matriz);
        JFrame frame = new JFrame("Matriz");
        frame.setLocation(50,130);
        frame.setSize(400,300);
        Container c = frame.getContentPane();
        c.add(panelMat);
        frame.setResizable(false);
        frame.show();
        
        
    }
}
public int[][] MetodoQueCalculaAMultiplicacaoDasMatriz()
{
      int[][] matriz = new int[5][5];
      for(int index1=0;index1 < matriz.length;index1++) 
      {
          for(int index2=0;index2 < matriz.length;index2++) 
          {       
             if(index1 &lt;index2)
                matriz[index1][index2] = 0;
             else
               matriz[index1][index2] = 1;
          }
      }
    return matriz;
}
public static void main()
{
   new Janela2();
}

}[/quote]>

Fábio, procure estudar o AbstractAction, vale muito apena. Pois assim, você poderá criar uma ação e poderá reutilizar o código sem ficar dando um CTR-C e CTR-V :wink:

[code]Action acaoSaida = new AbstractAction() {

public void actionPerformed(ActionEvent event) {
System.out.println(“Saindo do Sistema…”);
System.exit(0);
}

};[/code]

depois de ter criado a sua ação você poderá setar ela em QUALQUER componente que suporta uma action. Ex: JButton.

Ta vendo como é simples? :wink:

ou:

JButton sair = new JButton("Sair");
sair.addActionListener(acaoSaida);

Mais simples ainda…
IMHO