Desabilitar todos os campos do JPanel

2 respostas
danieldestro

Moçada,
como posso desabilitar todos os campos (text, combo, etc) do meu JPanel?

Tentei assim:

public void habilitarCampos( boolean b ) { java.awt.Component[] comps = this.getComponents(); for( int i=0; i<comps.length; i++ ) { if( comps[i] instanceof javax.swing.JTextField || comps[i] instanceof javax.swing.JList || comps[i] instanceof javax.swing.JComboBox || comps[i] instanceof javax.swing.JButton ) { comps[i].setEnabled( b ); } } }

Mas nao funcionou!

2 Respostas

Heber

Acho que vc deve rever o restante do código pois acabei de Testar e funcionou perfeitamente !!!

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

/*
 * Created on 07/04/2004
 */
/**
 * @author Heber
 */
public class JPanelDisableComponents extends JDialog{
    
    JPanel pnl;
    
    public JPanelDisableComponents(){
        super(new JDialog(),"Desabilitando Components no JPanel");
        
        pnl = new JPanel();
        pnl.setLayout(null);
        
        JTextField [] text = new JTextField[5];
        JComboBox [] combo = new JComboBox[5];
        JLabel [] label = new JLabel[5];
        JButton [] button = new JButton[5];
        
        int x = 10;
        int y = 10;
        for (int i = 0; i < text.length; i++) {
            text[i] = new JTextField();
            text[i].reshape(x,y,100,20);
            
            combo[i] = new JComboBox();
            combo[i].reshape(x+100,y,100,20);
            
            label[i] = new JLabel("Label"+i);
            label[i].reshape(x+200,y,100,20);
            
            button[i] = new JButton("Button"+i);
            button[i].reshape(x+300,y,100,20);
            
            pnl.add(text[i]);
            pnl.add(combo[i]);
            pnl.add(label[i]);
            pnl.add(button[i]);
            
            y += 20;
        }
        
        JButton btn = new JButton("Habilitar / Desabilitar");
        btn.addActionListener(
            new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    Component[] c = pnl.getComponents();
                    for (int i = 0; i < c.length; i++) {
                        c[i].setEnabled(!c[i].isEnabled());
                    }
                }
            }
        );
        
        this.getContentPane().setLayout(new BorderLayout());
        this.getContentPane().add(pnl,BorderLayout.CENTER);
        this.getContentPane().add(btn,BorderLayout.SOUTH);
        this.setSize(800,400);
        this.setVisible(true);
        
    }
    
    public static void main(String[] args) {
        new JPanelDisableComponents().addWindowListener(
            new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            }
        );
    }
}
danieldestro

A, esquecí de postar aqui. Eu já tinha resolvido.
O que eu fiz foi fazer um método recursivo, pois meus campos (text, combo, …) estão agrupados dentro de JPanel, e sem recursividade eu apenas pegava o JPanel.

Valeu!

Criado 7 de abril de 2004
Ultima resposta 7 de abr. de 2004
Respostas 2
Participantes 2