Como clicar num botão e abrir uma classe sem interface gráfica (não Frame)?

4 respostas
fjfeitosa

Olá pessoal! preciso da ajuda de vocês. Estou acostumado a clicar num botão e abrir um frame. Agora queria abrir uma classe sem interface gráfica (principal1), abaixo. Clico no botão, (na classe Rel1) mas não consigo abrir a classe principal1, que acessa outras classes, para abrir um relatorio . Por favor, qual a diferença de abrir um frame e uma classe sem interface gráfica?

//Interface de acesso à classe 'principal' (abaixo)

import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import javax.swing.text.*;
import java.util.*;
import java.text.*;

public class Rel1 extends JFrame implements ActionListener 
{
	private Container c;
	private JLabel lTit;	               
	private JButton bSair, bRel;	                
	
	public Rel1() 
	{
		super("Relatorios");		
		c = getContentPane();
	    c.setLayout(null);
        lTit = new JLabel("Relatorio",JLabel.CENTER);
    	lTit.setOpaque(true);
              
	    bSair = new JButton("Sair");
	    bSair.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0)));
	    bRel = new JButton("Abrir relatorio");
	    bRel.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0)));
        
	    c.add(lTit);
	    c.add(bRel);
	    c.add(bSair); 
	    
	    lTit.setBounds(20,5,210,30);
	    bSair.setBounds(140,50,90,20);
	    bRel.setBounds(20,50,90,20);
	    
	    bSair.addActionListener(this);
	    bRel.addActionListener(this);
	    
		setSize(260,120);
		setVisible(true);
		setResizable(true);
		setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);		
	}
	
	public void actionPerformed(ActionEvent evt)
 {
		

     if(evt.getSource()==bRel)
    { 
   
	  principal1 p = new principal1(); 
	          
    }                 


  
   
  } 
	          public static void main (String args[]) 
	         {
		       Rel1 rels = new Rel1();	
	         }	
}
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;

public class principal1 {
	public static void main(String[] args) throws JRException {
		repositorioProduto rep = new repositorioProduto();
		JasperPrint relat;
		
		//Insere mais um produto e exibe o relatorio
	//	String desc = JOptionPane.showInputDialog("Descrição do produto: ");
	//	double valor = Double.parseDouble(JOptionPane.showInputDialog("Valor: "));
	//	produto prod = new produto(desc,valor);
		
		try {
		//	rep.inserir(prod);
			relat = rep.gerar();
			JasperViewer.viewReport(relat, false);
		} catch (ExcRepositorio e) {
			JOptionPane.showMessageDialog(null, "Erro:(1) " + e.getMessage());
		}	
	}
}

4 Respostas

rmendes08

Nenhuma, a diferença é que o método main deve ser chamado somente na sua classe principal, ou seja, a classe de entrada do seu aplicativo.

fjfeitosa

Desculpe rmendes08, mas ainda não entendi porque do jeito que fiz não funcionou. Eu tenho o método main na classe Rel1 e na principal1. Observação: se eu simplesmente compilar a classe principal1 e executá-la no JCreator, tudo funciona, e acessa o relatório. Se eu chamar através de Rel1, não funciona. Socorro!!!

A

fjfeitosa, pelo que entendi seu problema é o seguinte.. quando você so chama a classe Principal.. o compilador chama o Main para vc e aparece o relatorio, porem quando vc chama a classe por outra classe, a unica coisa que está sendo chamado é o construtor da classe Principal..

Resumindo.. quando vc faz isto
if(evt.getSource()==bRel)    {   
      principal1 p = new principal1();   
    }
Só o construtor está sendo chamado.. o que vc pode fazer é pega tudo que está no main, e joga para um metodo.. assim
public class principal1 {   
    public void imprimir() {
        repositorioProduto rep = new repositorioProduto();   
        JasperPrint relat;   
           
        //Insere mais um produto e exibe o relatorio   
    //  String desc = JOptionPane.showInputDialog("Descrição do produto: ");   
    //  double valor = Double.parseDouble(JOptionPane.showInputDialog("Valor: "));   
    //  produto prod = new produto(desc,valor);   
           
        try {   
        //  rep.inserir(prod);   
            relat = rep.gerar();   
            JasperViewer.viewReport(relat, false);   
        } catch (ExcRepositorio e) {   
            JOptionPane.showMessageDialog(null, "Erro:(1) " + e.getMessage());   
        }     
    } 

    public static void main(String[] args) throws JRException {   
      principal1 p = new principal1();   
      p.imprimir();             
    }   
}
e na hora de chamar com o botão vc faz assim
if(evt.getSource()==bRel)  {   
    principal1 p = new principal1();   
    p.imprimir();             
}
Isto deve resolver seu problema Att
fjfeitosa

Alô, Astork !
È isso mesmo, cara!
Funcionou!
Obrigado, obrigado mesmo, pois já estava me desesperando!
Obrigado, também ao rmendes08.
Só preciso de uma última orientação, de quem possa me ajudar: como eu informo ao forum que já está resolvido?
Até mais! …

Criado 23 de fevereiro de 2010
Ultima resposta 24 de fev. de 2010
Respostas 4
Participantes 3