Visibilidade de um container

3 respostas
Ricardo_Siqueira

Bom dia pessoas.
Seguinte, estou com um problema muito esquisito.
Toda vez que uma tela específica é iniciada o JFrame abre vazio como se não tivesse nada nele. Daí se eu clico em maximizar ou se clico para redimensionar a tela com o mouse, os componentes ficam vísíveis(botões, labels, combos, listas etc) e continuam visíveis mesmo quando restauro ao tamanho original. Mas não quero ter de maximizar toda vez q abrir essa tela até porque ela será aberta várias vezes para qualquer função do programa.
Alguém pode me dizer o q pode estar errado ou faltando?

Abaixo um exemplo do meu programa.

package src;

import javax.swing.*;

import java.awt.*;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.ParseException;
import java.util.ArrayList;
import javax.swing.text.MaskFormatter;

public class TelaAdFunc3{
 
    private JButton jButton1, jButton2,jButton3;
    private JList jList1 ,jList2;
    private JScrollPane jScrollPane1, jScrollPane2;
    private JFrame frame;
    
    public TelaAdFunc3() {
        try{ 
            
        	initComponents();}
        catch(SQLException ex){
     	   ex.printStackTrace();
        }
        catch(ClassNotFoundException ex){
     	   ex.printStackTrace();
        }
        catch(Exception ex){
     	   ex.printStackTrace();
        }
         
     }
	
	public void initComponents()throws SQLException, ClassNotFoundException {

		
    
		//*************************
		
		jScrollPane1 = null;
    	jScrollPane2 = null;
    	jList1 = null;
    	jList2 = null;
    	jButton1 = null;
        jButton2 = null;
        jButton3 = null;
        frame = null;
        
        //********************
       
        jScrollPane1 = new JScrollPane();
        jScrollPane2 = new JScrollPane();
        jList1 = new JList();
        jList2 = new JList();
        jButton1 = new JButton();
        jButton2 = new JButton();
        jButton3 = new JButton();
      	frame = new JFrame();
		Container panel = frame.getContentPane();
		//panel.setVisible(true);
		//*********************
		
        panel.setLayout(null);
        panel.add(jScrollPane1);
        panel.add(jScrollPane2);
        panel.add(jList1);
        panel.add(jList2);
        panel.add(jButton1);
        panel.add(jButton2);
        panel.add(jButton3);
        panel.setVisible(true);
		
		
        //**********************
		jButton1.setFont(new java.awt.Font("Arial", 3, 12));
        jButton1.setText(">>>");
        jButton1.setToolTipText("Adicionar funcionario(s) selecionado(s) ao grupo.");
        jButton1.setBounds(0,0,50,50);
        
        //*************
        jButton2.setFont(new java.awt.Font("Arial", 3, 12));
        jButton2.setText("<<<");
        jButton2.setToolTipText("Retirar funcionario(s) selecionado(s) do grupo.");
        
        //*************
        jButton3.setFont(new java.awt.Font("Arial", 1, 12));
        jButton3.setText("OK");
        jButton3.setToolTipText("Gravar alterações");

        //*************

    
        
       
        
        
        //*************Lista 1- Todos os funcionários(esquerda):
 
			
			jList1.setModel(new AbstractListModel() {
	            String[] strings = {"item1", "item2", "item3"};
	            public int getSize() { return strings.length; }
	            public Object getElementAt(int i) { return strings[i]; }
	            
	        });
        jList1.setToolTipText("Todos os funcionários cadastrados no sistema.");
	    jList1.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
	    jScrollPane1.setViewportView(jList1);
	    
		
	   
	    
	    
	    //****************Lista2  - Funcionários Associados(direita).
	

		   jList2.setModel(new AbstractListModel() {
	           String[] strings = {"item1", "item2", "item3"}; 
	           public int getSize() { return strings.length; }
	           public Object getElementAt(int i) { return strings[i]; }
	       });
	    jList2.setToolTipText("Funcionários associados ao grupo");
	    jList2.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
	    jScrollPane2.setViewportView(jList2);
	    
	    //************** 
	    
	    JFrame.setDefaultLookAndFeelDecorated(false);
        frame = null;
        frame = new JFrame("Cadastro de funcion41rios");
        //frame.setLocation(200, 200);
       
        
        frame.setContentPane(panel);
        frame.pack();
        frame.setVisible(true);
        
        frame.setDefaultCloseOperation(1);
        frame.setBounds(280,150,500,360);
        //frame.setMaximizedBounds(new Rectangle(280,150,500,360));
        frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
        
        //*********localizando componentes na tela
        
        jScrollPane1.setBounds(5,5,210,300);
        jScrollPane2.setBounds(275,5,210,300);
        jButton1.setBounds(215,50,60,25);
        jButton2.setBounds(215,75,60,25);
        jButton3.setBounds(215,100,60,25);}
	    
	    
	
	//********botão adiciona

	//***********botão remove


      
      public static void main(String[] args){
    	  new TelaAdFunc3();
      }
   
	   
}

3 Respostas

_fs

Aqui o método funcionando:

public void initComponents() throws SQLException, ClassNotFoundException
	{

		jScrollPane1 = null;
		jScrollPane2 = null;
		jList1 = null;
		jList2 = null;
		jButton1 = null;
		jButton2 = null;
		jButton3 = null;
		frame = null;

		// ********************

		jScrollPane1 = new JScrollPane();
		jScrollPane2 = new JScrollPane();
		jList1 = new JList();
		jList2 = new JList();
		jButton1 = new JButton();
		jButton2 = new JButton();
		jButton3 = new JButton();
		frame = new JFrame();
		Container panel = frame.getContentPane();
		// panel.setVisible(true);
		// *********************

		panel.setLayout( null );
		panel.add( jScrollPane1 );
		panel.add( jScrollPane2 );
		panel.add( jList1 );
		panel.add( jList2 );
		panel.add( jButton1 );
		panel.add( jButton2 );
		panel.add( jButton3 );
		panel.setVisible( true );

		// **********************
		jButton1.setFont( new java.awt.Font( "Arial", 3, 12 ) );
		jButton1.setText( ">>>" );
		jButton1.setToolTipText( "Adicionar funcionario(s) selecionado(s) ao grupo." );
		jButton1.setBounds( 0, 0, 50, 50 );

		// *************
		jButton2.setFont( new java.awt.Font( "Arial", 3, 12 ) );
		jButton2.setText( "<<<" );
		jButton2.setToolTipText( "Retirar funcionario(s) selecionado(s) do grupo." );

		// *************
		jButton3.setFont( new java.awt.Font( "Arial", 1, 12 ) );
		jButton3.setText( "OK" );
		jButton3.setToolTipText( "Gravar alterações" );

		// *************

		// *************Lista 1- Todos os funcionários(esquerda):

		jList1.setModel( new AbstractListModel()
		{
			String[] strings = { "item1", "item2", "item3" };

			public int getSize()
			{
				return strings.length;
			}

			public Object getElementAt( int i )
			{
				return strings[ i ];
			}

		} );
		jList1.setToolTipText( "Todos os funcionários cadastrados no sistema." );
		jList1.setSelectionMode( javax.swing.ListSelectionModel.SINGLE_SELECTION );
		jScrollPane1.setViewportView( jList1 );

		// ****************Lista2 - Funcionários Associados(direita).

		jList2.setModel( new AbstractListModel()
		{
			String[] strings = { "item1", "item2", "item3" };

			public int getSize()
			{
				return strings.length;
			}

			public Object getElementAt( int i )
			{
				return strings[ i ];
			}
		} );
		jList2.setToolTipText( "Funcionários associados ao grupo" );
		jList2.setSelectionMode( javax.swing.ListSelectionModel.SINGLE_SELECTION );
		jScrollPane2.setViewportView( jList2 );

		// **************

		JFrame.setDefaultLookAndFeelDecorated( false );
		frame = null;
		frame = new JFrame( "Cadastro de funcion41rios" );
		// frame.setLocation(200, 200);

		frame.setDefaultCloseOperation( 1 );
		frame.setBounds( 280, 150, 500, 360 );
		// frame.setMaximizedBounds(new Rectangle(280,150,500,360));
		frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

		// *********localizando componentes na tela

		jScrollPane1.setBounds( 5, 5, 210, 300 );
		jScrollPane2.setBounds( 275, 5, 210, 300 );
		jButton1.setBounds( 215, 50, 60, 25 );
		jButton2.setBounds( 215, 75, 60, 25 );
		jButton3.setBounds( 215, 100, 60, 25 );
		

		frame.setContentPane( panel );
		frame.setVisible( true );
	}

Já que está trabalhando com posicionamento e tamanhos absolutos, não precisa chamar pack() e deve mostrar o Frame depois de posicioná-lo.

Apontamentos

  • se quer que as JLists possuam rolagem, deve fazer assim:
jList1 = new JList();
jScrollPane1 = new JScrollPane( jList1 );
  • para centralizar o frame na tela do usuário, basta fazer frame.setLocationRelativeTo( null ) antes de mostrá-lo.
  • é um problema não utilizar um gerenciador de layout, pois as telas ficam horríveis quando redimensionadas para qualquer tamanho além do determinado pelo programador. Se deseja fazer interfaces de melhor qualidade, utilize algum gerenciador de layouts do Swing ou aprenda esta biblioteca:
    http://www.jgoodies.com/freeware/forms
Ricardo_Siqueira

Felipe muito obrigado! Resolveu.

Então, minha idéia mais sofisticada de “fazer uma tela bonita” era fazer no NetBeans e colar no Eclipse. O problema é que a lógica do NetBeans é meio complicada e eu não entendo a forma como ele posiciona os componentes na tela. E como eu queria uma tela que além de ser atualizada constantemente(toda vez que muda um valor) ainda pode acontecer de serem adcionados uns botões ou listas posteriormente. No NetBeans eu teria q fazer tudo dnovo toda vez q precisasse de um novo botão então resolvi fazer na mão mesmo. Usei layout null porque acho muito complexo usar layouts como border grid etc.
A coisa da tela ficar feia quando redimensionada é verdadeira…por isso eu coloquei um setMaximized() pra reduzir a possibilidade deste problema acontecer.

Mas o que é um gerenciador de layouts?

_fs

Gerenciadores de layout.

Mas a api que sugeri é bem mais simples e é bastante boa. Leia a documentação no link que te passei.

Criado 18 de abril de 2006
Ultima resposta 18 de abr. de 2006
Respostas 3
Participantes 2