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

7 respostas
F

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?

7 Respostas

A

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

F

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

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).

C

no botao:

JButton bt = new JButton("resultado");
bt.addActionListener(
  new ActionListener()
  {
    public void actionPerformed(ActionEvent e)
    {
      labelResultado.setText("resultado: " + variavelComResultado);
    }
  }
);
C
Nao sei se entendi mais olhe este codigo ai talves te ajude;

import javax.swing.<em>;

import java.awt.event.</em>;

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();
}

}

F

OK aimgo. Vou tentar esse.

<blockquote><div class="quote-author">Carlos Martins:</div>Nao sei se entendi mais olhe este codigo ai talves te ajude;

import javax.swing.<em>;

import java.awt.event.</em>;

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();
}

}>

G

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:

Action acaoSaida = new AbstractAction() {

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

};

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

JButton sairButton = new JButton( acaoSaida );

Ta vendo como é simples? :wink:

K

ou:

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

Mais simples ainda…
IMHO

Criado 20 de março de 2005
Ultima resposta 23 de mar. de 2005
Respostas 7
Participantes 6