Eclipse X Netbeans

47 respostas
pedroroxd

Pessoal, to mechendo a 1 tempo com netbeans, sempre swing…
A algum tempo atrás tive problema por cause de redimencionamento de componentes na tela (usava null layout)
Meu professor falou que é bom eu usar eclipse, pq ae eu vo ter que saber um pouco dos layouts, e criar na “unha” os códigos…

Deixei ele pra trás e continuei com netbeans…
Agora eu tou querendo fazer um curso do Caelum (http://www.caelum.com.br/curso/fj-11-java-orientacao-objetos/)… Mas fikei triste…
Por causa disso: “Durante o curso aprende-se também os recursos da poderosa plataforma do Eclipse 3, a IDE líder de mercado.”
Não vê nada de netbeans…
Andei pesquisando por ae, e os desenvolvedores java “fodões”, todos usam o eclipse…
E me falaram que para fazer prova de certificado, é melhor acostumar com eclipse, que quem meche com eclipse sabe mais do código…
Agora não sei o que eu faço!

Criei uma telinha no netbeans normal em 1 minuto…
Demorei quase 40 minutos para fazer a mesma coisa no eclipse!

Agora não sei se faço o curso do Caelum ou não…

O que vocês acham? Eclipse ou netbeans?
Dei 1 olhada em um tópico passado (http://www.guj.com.br/posts/list/61756.java), e parece que netbeans ganhou, o que foi contra o que o site do Caelum está falando (Eclipse é lider)
E nesse outro (http://javafree.uol.com.br/topic-862155-Como-criar-telas-usando-eclipse.html) fala que para desenvolvimento Swing, o netbeans está anos luz do eclipse…

Para swing Netbeans é melhor? Então em que o eclipse é melhor?

47 Respostas

ViniGodoy

O problema não é o Eclipse, ou o Netbeans.

O problema está em você entender o funcionamento das classes java e como o java organiza os componentes de uma interface gráfica. O construtor visual do Netbeans abstrai isso para você, e daí o seu problema.

No fundo, o professor só quer dizer que você deve estudar como o Java trabalha. É óbvio que será mais demorado e trabalhoso (se não fosse, não teriam criado um editor visual, né?).
Por outro lado, é isso que te fará entender como tudo funciona, nem que seja para fazer usando o editor depois.

Você pode abrir o Netbeans, criar uma aplicação não visual (sem o editor), e começar a criar classes Swing nela. Assim vc não perde as teclas de atalho que já conhece, e estuda como as classes funcionam.

Outro detalhe: Uma pessoa que use o Eclipse e instale nele o plugin do Visual Editor, vai ter os mesmos problemas que vc está enfrentando.

Quanto ao seu tópico: Se procurar, vai achar outros tópicos no GUJ onde o Eclipse “ganha”. Isso porque os dois são IDEs poderoríssimas e super completas. Então, defender uma delas é como defender um time de futebol, ou uma religião…

pedroroxd

Ok…
Valeu ae viny (dinovo)…
Mas só uma pergunta…
Qual que você usa? =D
Só para ver se o que o cara falou (que os fodões usam eclipse) estava certo :wink:

e…
by the way, alguem tem um tutorial legal de swing em eclipse?
pq não achei nenhum bom até agora…

FabioNoth

Já usei o Eclipese na epoca de aulas de java da faculdade, aprendi a trabalhar com interface “TUDO NA UNHA”, porém mais adiante descobri algumas ferramentas do netbeans que me ajudaram muito, mais isso em questão de tempo, e não de aprendizagem, portanto se você quer aprender mais, o interesante é trabalhar com o Eclipse, agora se você quer trabalhar mais rápido é melhor o Netbeans

Atualmente uso o Netbeans

ViniGodoy

pedroroxd:
Qual que você usa? =D
Só para ver se o que o cara falou (que os fodões usam eclipse) estava certo ;)

Depende… para os jogos na maior parte das vezes eu uso o eclipse. Como lá quase não tem interface gráfica tradicional, uso pq o editor de “código puro” dele é muito bom. Para uma aplicação Swing, Netbeans com certeza. Também uso muito o netbeans para fazer profiling.

Não vejo muita diferença entre um e outro, em termos de IDE. Só uso o Eclipse pq há alguns anos atrás, o Netbeans era realmente muito inferior na parte de edição de código. Aí, me acostumei com os atalhos do eclipse. Mas desde a versão 5.0, eles andaram correndo atrás do prejuízo, e hoje ele está bem equiparado. Mas, como dizem os americanos “old habits die hard”.

pedroroxd:
by the way, alguem tem um tutorial legal de swing em eclipse?
pq não achei nenhum bom até agora…

Não que eu conheça. Mas no caso, você quer saber é de Swing puro. O IDE pouco importa:
http://java.sun.com/docs/books/tutorial/uiswing/

pedroroxd

vlws…
vou dar 1 olhada…
Pq agente sempre tem 2 opções hein? Que saco ! rs
Poderia padronizar… Só 1 IDE, pra todo mundo… Os caras da Sun (netbeans), chamar os do eclipse, pegar as qualidades de 1 e do outro, fazer um padrão, que todo mundo use…
Assim acaba com essa coisa de não saber por onde começar :stuck_out_tongue:

renamed

Cara, foi como disseram, nego vai até se xingar se alguém bater o martelo dizendo o IDE “X” é o melhor uhauhauha

Eu aprendi tudo no eclipse, nao me acho fodao uhahuahua…
Para estudo o eclipse acaba sendo melhor pq vc so tem uma janela de códigos… ai amigo é “se vira nos 30”… eu odiava Java por causa disso, tava acostumado com VB6 que era so arrastar os botoes na tela…

Mas aprendi… e acho que vc tmb aprendera… entao se vc procura tempo (desde que vc esteja usando AWT e Swing) nao pense duas vezes, va pro NetBeans…
Se vc procura ver o codigo q vc ta fazendo, va pro Eclipse… e tente aprender os atalhos q ele tem, sao viciantes hehehe

Abs.

romarcio

O NetBeans é uma excelente ferramenta para “produtividade” no desenvolvimento dos seus projetos.

Se você leva 1 minuto para fazer alguma coisa no netbeans e 40 minutos em outra ferramenta, continua com a que te dá mais produtividade.

A não ser que você vai cobrar por Hora seus projetos :lol: , brincadeira.

pedroroxd

hehehe…
o problema é que quando eu pego 1 projeto em eclipse eu me ferro…
pra mim é uma bagunça total…

to trabalhando com desenvolvimento de 1 software em uma empresa, como estagiário…
o primeiro dia eles me passaram 1 projeto em eclipse… nem tinha instalado no meu pc, nunca tinha visto a IDE…
to só me fudendo com o eclipse (rs)…

então axo que fica +/- assim:
Quem sabe NetBeans, não necessariamente sabe Eclipse…
Mas quem sabe Eclipse sabe NetBeans…

Então, vou me esfoçar, msmo que tome tempo para aprender eclipse…
quando for desenvolver projetos swing, vou usar o netbeans msmo…
mas tenho que estar preparado para pegar projetos em eclipse, e entender…

renamed

pedroroxd

Qual as duvidas q vc tem em relacao ao eclipse?

pedroroxd

melhor perguntar..
Quais as que eu não tenho! kkkk

olha só.. 1 aplicaçãozinha que eu baixei de exemplo para converter de Celsius para Fahrenheit:
public class HelloDude extends javax.swing.JFrame {
    
    /** Creates new form CelsiusConverterGUI */
    public HelloDude() {
        initComponents();
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
    private void initComponents() {
        tempTextField = new javax.swing.JTextField();
        celsiusLabel = new javax.swing.JLabel("Celsius");
        convertButton = new javax.swing.JButton();
        fahrenheitLabel = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Celsius Converter");
        setLocationRelativeTo(null);

        celsiusLabel.setText("Celsius");

        convertButton.setText("Convert");
        convertButton.addActionListener(new java.awt.event.ActionListener() {      	
        	        	
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                convertButtonActionPerformed(evt);
            }
        });

        fahrenheitLabel.setText("Fahrenheit");

        
         javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(tempTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(celsiusLabel))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(convertButton)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(fahrenheitLabel)))
                .addContainerGap(27, Short.MAX_VALUE))
        );

        layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {convertButton, tempTextField});

        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(tempTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(celsiusLabel))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(convertButton)
                    .addComponent(fahrenheitLabel))
                .addContainerGap(21, Short.MAX_VALUE))
        );
        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void convertButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_convertButtonActionPerformed
//Parse degrees Celsius as a double and convert to Fahrenheit
        int tempFahr = (int)((Double.parseDouble(tempTextField.getText()))
            * 1.8 + 32);
        fahrenheitLabel.setText(tempFahr + " Fahrenheit");
    }//GEN-LAST:event_convertButtonActionPerformed
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new HelloDude().setVisible(true);
            }
        });
    }
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JLabel celsiusLabel;
    private javax.swing.JButton convertButton;
    private javax.swing.JLabel fahrenheitLabel;
    private javax.swing.JTextField tempTextField;
    // End of variables declaration//GEN-END:variables
}
Lógico, a lógica, a programação eu entendo.. mas a parte que começa isso:
layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
tudo que começa com esses "." até o pack(), é japones para mim.. criar isso eu não fasso a mínima idéia de como fazer..
M
pedroroxd:
melhor perguntar.. Quais as que eu não tenho! kkkk olha só.. 1 aplicaçãozinha que eu baixei de exemplo para converter de Celsius para Fahrenheit:
public class HelloDude extends javax.swing.JFrame {
    
    /** Creates new form CelsiusConverterGUI */
    public HelloDude() {
        initComponents();
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
    private void initComponents() {
        tempTextField = new javax.swing.JTextField();
        celsiusLabel = new javax.swing.JLabel("Celsius");
        convertButton = new javax.swing.JButton();
        fahrenheitLabel = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Celsius Converter");
        setLocationRelativeTo(null);

        celsiusLabel.setText("Celsius");

        convertButton.setText("Convert");
        convertButton.addActionListener(new java.awt.event.ActionListener() {      	
        	        	
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                convertButtonActionPerformed(evt);
            }
        });

        fahrenheitLabel.setText("Fahrenheit");

        
         javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(tempTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(celsiusLabel))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(convertButton)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(fahrenheitLabel)))
                .addContainerGap(27, Short.MAX_VALUE))
        );

        layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {convertButton, tempTextField});

        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(tempTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(celsiusLabel))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(convertButton)
                    .addComponent(fahrenheitLabel))
                .addContainerGap(21, Short.MAX_VALUE))
        );
        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void convertButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_convertButtonActionPerformed
//Parse degrees Celsius as a double and convert to Fahrenheit
        int tempFahr = (int)((Double.parseDouble(tempTextField.getText()))
            * 1.8 + 32);
        fahrenheitLabel.setText(tempFahr + " Fahrenheit");
    }//GEN-LAST:event_convertButtonActionPerformed
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new HelloDude().setVisible(true);
            }
        });
    }
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JLabel celsiusLabel;
    private javax.swing.JButton convertButton;
    private javax.swing.JLabel fahrenheitLabel;
    private javax.swing.JTextField tempTextField;
    // End of variables declaration//GEN-END:variables
}
Lógico, a lógica, a programação eu entendo.. mas a parte que começa isso:
layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
tudo que começa com esses "." até o pack(), é japones para mim.. criar isso eu não fasso a mínima idéia de como fazer..
E é justamente isso o grande ponto forte e ao mesmo tempo o ponto "fraco" do Netbeans: enquanto você está usando aplicações feitas em Netbeans no Netbeans, tudo está as mil maravilhas. Agora, humanamente falando, o código gerado pelo Matisse (editor visual do Netbeans) é incompreensível. Por isso já dizem: Netbeans é uma ferramenta fantástica para alta produtividade, mas didaticamente falando, não é de início (claro que você poderia, como disse o ViniGodoy, fazer interface gráfica na unha com o Netbeans também).

Contudo isso não quer dizer que não se possa programar em Swing sem editores visuais. O gerenciador de leiaute que o Netbeans usa é o GroupLayout, que tem capacidades fantásticas, mas gera esse código "em japonês" :) . Para conhecer sobre outros gerenciadores de leiaute, leia o tutorial no site que o ViniGodoy postou. E lembre-se que, nesse caso, a IDE pouco importa.

pedroroxd
hmmm vo tentar... mas então se eu fosse fazer essa aplicação no eclipse não ia precisar dessa porrada de "." ?
layout.setHorizontalGroup(  
             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)  
             .addGroup(layout.createSequentialGroup()  
                 .addContainerGap()  
                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)  
                     .addGroup(layout.createSequentialGroup()  
                         .addComponent(tempTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)  
                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)  
                         .addComponent(celsiusLabel))  
                     .addGroup(layout.createSequentialGroup()  
                         .addComponent(convertButton)  
                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)  
                         .addComponent(fahrenheitLabel)))  
                 .addContainerGap(27, Short.MAX_VALUE))  
         );  
   
         layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {convertButton, tempTextField});  
   
         layout.setVerticalGroup(  
             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)  
             .addGroup(layout.createSequentialGroup()  
                 .addContainerGap()  
                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)  
                     .addComponent(tempTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)  
                     .addComponent(celsiusLabel))  
                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)  
                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)  
                     .addComponent(convertButton)  
                     .addComponent(fahrenheitLabel))  
                 .addContainerGap(21, Short.MAX_VALUE))  
         );  
         pack();  
     }
Alguém pode fazer essa aplicação no eclipse rapidinho e passar o código para mim? Só para eu ter 1 idéia +/-.... Vlws !
maior_abandonado

cara simples assim: você esta comparando coisas diferentes…

você esta comparando desenvolvimento em swing usando uma ide com framework de drag and drop e em outra IDE sem framework de drag and drop.

Mesmo que para isso uma ide seja melhor que a outra, para outras coisas pode não ser… o amis indicado é que vocÊ fique bom em ambas e não dependa de IDE… como o viny godoy disse, ele mesmo usa ambas, cada uma para determinado tipo de coisa, por que em algumas coisas um é melhor, para outras coisas o outro é melhor, fora que o que é melhor para mim, pode não necessáriamente ser melhor para você…

pedroroxd

k…
Mas para fazer akela aplicação em eclipse não necessita dakele tanto de “.” ?

layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap()
Até o “pack();” ?

Alguém pode fazer 1 favor?
Pega essa aplicação, e executa…
Depois pega ela, e faz no eclipse, só para eu ver +/- o código…
Esse negoço dos “.” não entra na minha cabeça…
Vlws!

Marky.Vasconcelos

Aprenda a usar um gerenciador de layout como o MigLayout.
Voce nao entende nada desse código por que usa o GroupLayout e só o NetBeans sabe vomitar isso ai pra fora. E ainda tem que manter um arquivo .form para continuar depois por que nem ele entende esse código de volta.

Nao se preocupa nao essas classes que ele gera assusta mesmo.

Acredito que a maioria das pessoas que preferem o eclipse é por que não gostam de gerenciadores de código e programam as telas na mão.

Assim como eu.

M

pedroroxd:
k…
Mas para fazer akela aplicação em eclipse não necessita dakele tanto de “.” ?

layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap()
Até o “pack();” ?

Alguém pode fazer 1 favor?
Pega essa aplicação, e executa…
Depois pega ela, e faz no eclipse, só para eu ver +/- o código…
Esse negoço dos “.” não entra na minha cabeça…
Vlws!


OK. Aqui está:

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

import net.miginfocom.swing.MigLayout;

/**
 * Classe de exemplo do gerenciador de leiaute MigLayout, mostrando como pode
 * ser simples fazer programas em Swing/SWT na mão. Tem a mesma funcionalidade
 * que o programa HelloDude, feito em Netbeas.
 * 
 */
public class TempConverter extends JFrame {

	private static final long serialVersionUID = 1L;
	private JTextField celsius;
	private JButton converter;
	private JLabel label1;
	private JLabel label2;

	/**
	 * Na instanciação ajustamos algumas características (como o título e o
	 * tamanho da janela) e informamos que o gerenciador de leiaute a ser usado
	 * será o MigLayout (ótimo para desenhar formulários na mão). Essa é a
	 * grande sacada: enquando o Netbeans usa um leiaute que é mais adequado
	 * para ele, nós usamos o que é mais adequado para nós.
	 */
	public TempConverter() {
		// === MUDANDO PARÁMETROS DA JANELA
		setTitle("Converter temperatura");
		setLayout(new MigLayout()); // aqui está!
		setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		// === INSTANCIANDO OBJETOS
		instaciarComponentes(); // delego a tarefa para esse método
		// === ADICIONAR NO PAINEL
		add(celsius);
		add(label1, "wrap");
		add(converter);
		add(label2);
		// === CENTRALIZAR JANELA
		pack();
		setLocationRelativeTo(null);
	}

	/**
	 * Este método instancia e ajusta os componentes da nossa janela. Isso
	 * poderia até ser feito no construtor, mas isso o deixaria mais ilegível e
	 * com muito texto.
	 */
	private void instaciarComponentes() {
		celsius = new JTextField(8);
		celsius.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				converteTemp();
			}
		});

		converter = new JButton("Converter");
		converter.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				converteTemp();
			}
		});

		label1 = new JLabel("Celsius");

		label2 = new JLabel("Fahrenheit");
	}

	/**
	 * Converte a temperatura e mostra no segundo rótulo (label2). Note que não
	 * é feito tratamento de exceções.
	 */
	private void converteTemp() {
		int tempFahr = (int) ((Double.parseDouble(celsius.getText())) * 1.8 + 32);
		label2.setText(tempFahr + " Fahrenheit");
		pack();
	}

	/**
	 * Método main, apenas mostra a janela.
	 * 
	 * @param args
	 *            argumentos das linha de comando
	 */
	public static void main(String args[]) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				new TempConverter().setVisible(true);
			}
		});
	}

}

Note algumas coisas:

  1. Mesmo com essa tonelada de comentários, com todos os imports e com “funcionalidades extras” em relação ao outro (quando você pressiona Enter no JTextField a tempertatura também é calculada, não é preciso clicar no botão), a quantidade de linhas é praticamente a mesma! E quando à legibilidade, não é preciso nem comentar.

  2. Nesse exemplo estou usando o MigLayout sugerido pelo Mark_Ameba. Para que ele funcione, você deve ter este JAR no seu build path.

pedroroxd

Valew Mark e marcobiscaro2112 …
Já baixei aki…
Vamo experimentar :wink:

ViniGodoy

O GroupLayout foi feito para ser manipulado por editores visuais:

http://java.sun.com/docs/books/tutorial/uiswing/layout/group.html

E provavelmente foi o caso desse código que você postou. Se ele foi originalmente feito em eclipse, seria bom pesquisar que plugin para editor de código foi usado para gerar esse exemplo. Se foi feito no Netbeans, então não foi feito para ser editado no eclipse. É possível codificar manualmente com ele, mas sem muita estruturação e comentários (o que os editores visuais normalmente não fazem), vai ser difícil entender.

Mas isso aí é código Java. A complicação foi gerada pelo editor, não pela IDE. É como quando você pega o código de resultado de um ANTLR (que também é Java) e tenta entender.

O Visual Editor, do eclipse, utiliza layout mais “humanos”, como o GridBagLayout, FlowLayout e BorderLayout (todos do Java padrão, do contrário do MigLayout). Até porque, ele tem a filosofia de que o programador poderá editar o código gerado pelo editor, ao contrário do Matisse. Pode-se fazer praticamente qualquer interface gráfica “na unha” só com esses 3 gerenciadores de layout. Procure informar-se sobre eles. Depois, baixe o VE e tente utiliza-los por lá. Com um pouco de prática, você vai ver que não são tão ruins assim, e certamente são um alívio quando sua janela tem que ser redimensionável.

pedroroxd

Só 1 pergunta de 1 nub que tá começando…
O que significa isso?

private static final long serialVersionUID = 1L;

E isso?

add(label1, "wrap");

Aki você seta o tamanho do jTextField:

celsius = new JTextField(8);

Como que eu seto o do botão?

Vlws…
Obrigado pela paciencia =)

M

pedroroxd:
Só 1 pergunta de 1 nub que tá começando…
O que significa isso?

private static final long serialVersionUID = 1L;

Aki você seta o tamanho do jTextField:

celsius = new JTextField(8);

Como que eu seto o do botão?

Vlws…
Obrigado pela paciencia =)

A primeira linha é uma identificação para objetos serializáveis (como nossa classe extende JFrame e JFrame é um Serializable, o compilador gera um warning na hora da compilação se não houver este campo). Para saber mais procure por serialização.

E no caso do JTextField, o valor passado é, segundo a documentação, o “número de colunas usado para definir sua largura preferida” (em tradução livre). No caso do JButton não há uma opção assim. Você teria que definir isso com o método setPreferredSize(). Ficaria parecido com isso:

converter.setPreferredSize(new Dimension(100, 40));

Porém note que o gerenciador de leiaute ignora esse valor se ele for muito baixo e fizer com que o texto fique visível somente em partes.

M

Quando você adiciona um componente em um painel, ele aceita um segundo argumento, que é uma referência para o gerenciador de leiaute. Nesse caso, você diz que quer uma quebra de linha logo após esse componente.

Com outros gerenciadores de leiaute, outros tipos de argumento seriam aceitos. Por exemplo, quando se usa BorderLayout, costuma-se fazer algo como:

add(componente1, BorderLayout.SOUTH);
add(componente1, BorderLayout.CENTER);
add(componente1, BorderLayout.NORTH);
add(componente1, BorderLayout.WEST);
add(componente1, BorderLayout.EAST);
pedroroxd

Opa! Vlws
Qual a diferença do setPreferredSize e do setSize?
setSize é só pra frame?

ViniGodoy

Os gerenciadores de layout redimensionam componentes. Quando vc maximiza a tela, por exemplo.

O setPreferredSize diz ao gerenciador qual é o tamanho que você mais gostaria que aquele componente se apresentasse na tela. Assim, ele tomará cuidado, caso em seus cálculos o componente devesse ficar menor que esse tamanho. Algumas políticas de layout, ou de barras de rolagem, também irão se basear no preferredSize.

Note que, quando existem barras de rolagem, o preferredsize será o tamanho do componente com a barra, enquanto o size será o tamanho total do componente, dentro da barra. Por exemplo, um JPanel de size (800,600) num preferredsize de (500,500) terá na tela o tamanho (500,500), barra de rolagem, e uma porção de (300,100) pixels estará oculta, embaixo da barra.

renamed

setSize é o tamanho do elemento Pedro =)

felipedamiani

Cara, eu particularmente uso o eclipse pelo seu editor de código e pelo fato de não trabalhar com swing.
Agora se tu for programar no netbeans sem o editor visual é a mesma coisa que o eclipse, vai ter que fazer na unha,
pra swing acho que nenhuma IDE bate o netbeans…
Mais cada um é cada um,
tens que trabalhar com a IDE que TU acha melhor, e não as que os outros acham melhor.

renamed

Eu já tentei criar uma interface swing no Netbeans e copiar o codigo pro Eclipse, mas eles sabidamente separaram o código em varios arquivos ai a parada deu um monte de erros ahuauha

pedroroxd

Valews!
To começando a gostar de eclipse… =D
Os atalhos são bem legais, e o miglayout ajuda bastante…
Em questão de velocidade para swing, ainda para mim, o melhor é o netbeans…
Mas axo que pegando a manha aki com os tamanhos, vai ficar facil fazer os swing no eclipse…

Axei que nunca + ia ter que ficar xutando o tamanho em pixel dos componentes (que nem quando eu programava php)…
Hehehe
Com o tempo os xutes começam a ser certeiros :wink:

renamed

Pedro… com telas simples vc pode usar o gridLayout (eu sempre uso)… ou msm se nao usar layout nenhum, com o tempo de cabeça vc aprende a posicionar os elementos na tela ^^

M

Poder até pode usar null layout… mas não é bom. Imagine se o LookAndFeel da aplicação é mudado e todos os componentes ficam com o texto cortado :shock: . Não seria legal nem para o usuário, nem para você.

lina

Oi,

pedroroxd, primeiro gostaria de lhe dar os Parabéns! Poucos fazem isso que você fez… baixar as duas IDE’s e fazer suas comparações =)

Vou dar minha opinião:

O correto seria ter um estudo profundo sobre Layouts. Pois para cada situação existe um layout especifico!

Quando comecei a estudar swing (Para fazer algumas telinhas), precisei fazer um estudo e por fim acabei criando um layout para minha aplicação. Chamei de: LinaOutManager

Ele faz uma sobreposição de alguns layouts: BorderLayout, GridBagLayout etc…

Um dia poderei disponibiliza-lo! Ainda não…

Essa seria minha sugestão! estudar os gerenciadores de layout.

Tchauzin!

ViniGodoy

Poder até pode usar null layout… mas não é bom. Imagine se o LookAndFeel da aplicação é mudado e todos os componentes ficam com o texto cortado :shock: . Não seria legal nem para o usuário, nem para você.

O layout null tem os seguintes problemas:

a) Não funciona com múltiplos look&feel (bem citado);

b) Podem haver diferenças num mesmo look&feel de SO para SO, portanto, não é multiplataforma;

c) O código não reage ao redimensionamento da tela (e não conte que isso nunca irá ocorrer);

d) Por incrível que pareça, depois de se acostumar com os layout managers, e passar para os editores visuais, vai parecer mais difícil ajustar componentes com null layout! Especialmente se ao mudar a posição de componentes, sua tela mudar de tamanho.
M

lina:

Quando comecei a estudar swing (Para fazer algumas telinhas), precisei fazer um estudo e por fim acabei criando um layout para minha aplicação. Chamei de: LinaOutManager

:lol: Bem criativo!

renamed

Foi como eu disse… telas simples ^^

pedroroxd

Valew lina!
Acho que poca gente faz isso por falta de tempo! rs
Como eu tenho 15 aninhos, posso ficar testando, ae quando eu tiver lá pelos meus 20 espero tar craque =D
Espero 1 dia ver o LinaOutManager fazendo sucesso kkkkk
to usando o MigLayout por enquanto… Mais por ignorancia msmo, pq não sei as vantagens, nem as desvantagens… Mas se os GUJianos falam que é bom, vou dar 1 voto de confiança :stuck_out_tongue_winking_eye:

Valew vini…
Nunca mais vou usar nulllayout! kkk
chega de problemas T_T

pedroroxd
Que legal! Meu primeiro problema com miglayout! =D Espero que alguém que o use possa me dar 1 empurrãozinho... Tava fazendo minha primeira swing em eclipse, bem simples (inverter seu nome), segue o código:
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import net.miginfocom.swing.MigLayout;

public class PrimeiroPepi extends JFrame {
	private static final long serialVersionUID = 1L;
	private JLabel label1;
	private JLabel label2;
	private JLabel label3;
	private JTextField nome;
	private JButton botao;

	public PrimeiroPepi() {
		setTitle("Inversor de nomes");
		setLayout(new MigLayout());
		setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		// //////
		instaciarComponentes();
		// /////
		add(label1);
		add(nome, "wrap");
		add(botao, "wrap");
		add(label2);
		add(label3);
		// ////
		pack();
		setLocationRelativeTo(null);
	}

	private void instaciarComponentes() {
		nome = new JTextField(20);
		nome.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				inverternome(nome.getText());
			}
		});

		botao = new JButton("Inverter");
		botao.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				inverternome(nome.getText());
			}
		});
		label1 = new JLabel("Digite seu nome: ");
		label2 = new JLabel("Seu nome invertido é: ");
		label3 = new JLabel("NomeInvertido");
		label3.setForeground(Color.blue);
	}

	public void inverternome(String nome) {
		String[] letrainvertida = new String[nome.length()];
		String palavra = "";

		for (int i = 0; i <= nome.length() - 1; i++) {
			letrainvertida[i] = String.valueOf(nome.charAt(nome.length() - 1
					- i));
		}

		for (int i = 0; i <= letrainvertida.length - 1; i++) {
			palavra = palavra + letrainvertida[i];
		}
		label3.setText(palavra);
                pack();
	}

	public static void main(String[] args) {
		new PrimeiroPepi().setVisible(true);
	}
}
Então, eu quis aumentar o tamanho do botão... Adicionei isso ao código:
botao.setPreferredSize(new Dimension (200,20));
O que sucessdeu, foi que quando eu rodei, o jTextField (que está 1 linha acima do jButton) foi para frente.. Onde o jButton termina, o jTextField começa... Então tentei, em vez de aumentar o tamanho do jButton, reposiciona-lo... Mas ele não se posiciona no local que eu colokei.. Alguma sugestão?

Vlws!

G

Olha Pedro vou falar minha opiniao sobre os dois IDE sou um desenvolvedor java iniciante, comecei a mecher com o netbeans fazendo as telinhas tudo bonitinho e tals, dai comecei a desenvolver em eclipse tendo muita dificuldades ainda tenho, e entrei em uma empresa que tipo eh mto sevirou fraga, dai eu apanhei bastante no começo com o eclipse, mas hoje logo hoje mesmo estava criando uma aplicação em netbeans para ficar bonita e tals, ter mais controle, e me deparei com uma puta dificuldade EU acho o netbeans bem mais fraco que o eclipse, voce tem pouca dominancia sobre o codigo da parte grafica o maximo que voce faz eh eventos dos botoes, por isso considero o eclipse muito superior ao netbeans, fora os paus do netbeans que as vezes aquele amigo nosso ctrl + espaço da pau muitas vezes

M

Troque sua linha 27 por isso:

add(botao, "span, grow");

Isso indica que o botão deve ocupar todo o espaço até o final do painel (no caso, a “linha” inteira).

Ataxexe

Só pra dar uma dica: a Genuitec tem uma versão do Matisse para o renomado plugin MyEclipse (dela também). Eu achei muito interessante, apesar de gostar mais do WindowBuilder (da Instantiations).

http://www.myeclipseide.com/

PS: vale lembrar que esse plugin é pago, mas você pode baixar uma versão totalmente funcional por 30 dias direto no site.

pedroroxd

valew marcobiscaro2112
Axo que vo estudar o MigLayout mesmo…
Parece ser bem facil, e supre todas minhas necessidades (pelo - por enquanto)
Qualquer dúvidas vo te mandar mensagem privada hein!
kkkkk

Marky.Vasconcelos

E outra voce nem precisa setar o preferredSize chutando os valores. Voce pode usar grow em um eixo e fixar em outro só com o parametro do MigLayout.

panel.add(nome,"growy,w 200,center,span");//Width 200
panel.add(info,"w 200, h 600,center");//heigth 600
pedroroxd

Mark_Ameba:
E outra voce nem precisa setar o preferredSize chutando os valores. Voce pode usar grow em um eixo e fixar em outro só com o parametro do MigLayout.

panel.add(nome,"growy,w 200,center,span");//Width 200 panel.add(info,"w 200, h 600,center");//heigth 600


OMG
esse MigLayout é foda mesmo =D
Agora só tenho que começar a “decorar” esses comandos…
como “growy,w 200,center,span” e o “wrap” :stuck_out_tongue:

pedroroxd

Alguém ae já fez, ou conhece alguem que ja tenha feito algum curso do Caelum?
Estou interessado em fazer, mas quero ver se realmente vale a pena…

Outra dúvida:

add(ex1, "wrap"); add(ex2);
Então o ex2 fica 1 “linha” abaixo do ex1…
Como faço para ele ficar + de 1 linha?

Vlws !

colosos_colossus

pedroroxd

Cara você não entendeu o que o Vinicius falou?
lê de novo lá cara!!
foi a resposta mais inteligente
na questão de ser direccionado totalmente ao seu problema

pedroroxd

colosos=colossus:
pedroroxd

Cara você não entendeu o que o Vinicius falou?
lê de novo lá cara!!
foi a resposta mais inteligente
na questão de ser direccionado totalmente ao seu problema


Axo que você só olhou a página 1, e nem viu o resto do tópico :stuck_out_tongue:
Já agradeci o vinicius, e a resposta dele realmente ajudou muito, como a do ameba e a da lina…

Agora só tou com 1 dúvida aki…

add(ex1, "wrap"); add(ex2);
Então o ex2 fica 1 “linha” abaixo do ex1…
Como faço para ele ficar + de 1 linha?
O correto seria usar gap?
Do tipo:

add(ex1 "grow,span,gapleft 40,gapright 40, gapbottom 20"); add(ex2);

M

Você pode usar “wrap 50”, onde o 50 representa o número de pixels entre uma linha e outra.

pedroroxd

Ahh
Sakei =)
Vlws !

M

Olha tanto o Netbeans quanto Eclipse é trabalhoso ou não pois as duas tem o editor do código mas também tem um ferramenta para criar interfaces, a melhor coisa a fazer por más que seja trabalhoso se acostumar a fazer no editor do código, fica mais limpo o código e você tem um controle melhor na hora de dar manutenção

O que tem de comparação as duas IDEs são suportes a linguagem, plugins disponíveis essas coisas, as duas são ótimas ferramentas por más que você crie layout no Netbeans ou no Eclipse alterar os parametros dos componentes pode acabar sendo mais demorado se usar a aba de propriedades com o tempo você se acostuma a “desenvolver na unha” e mesmo com esse trabalho adicional para criar os Frames vai continuar utilizando código mesmo que indiretamente quando utilizar o recurso da IDE.

Faça na mão mesmo aprenda a linguagem para não ficar dependente de IDE

Criado 12 de dezembro de 2009
Ultima resposta 14 de ago. de 2013
Respostas 47
Participantes 14