JavaBean - Como criar um component customizado

2 respostas
hopper.frf

Pessoal, eu preciso fazer um menu customizado em swing.
Seria um JToolbar composta por vários JButtons…
pois esse menú será utilizado em várias telas do sistema.
O problema é que não consigo desenhar o JButton.
Estou fazendo o seguinte:
Criei uma classe java que extend JComponent e implements Serializable.

public class MenuBean extends JPanel implements Serializable {

    private JButton botaoRetornar;

    /** Creates new form Menu */
    public MenuBean() {
    }

    /**
     * Get the value of botaoRetornar
     *
     * @return the value of botaoRetornar
     */
    public JButton getBotaoRetornar() {
        return botaoRetornar;
    }

    /**
     * Set the value of botaoRetornar
     *
     * @param botaoRetornar new value of botaoRetornar
     */
    public void setBotaoRetornar(JButton botaoRetornar) {
        this.botaoRetornar = botaoRetornar;
    }
    private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);

    /**
     * Add PropertyChangeListener.
     *
     * @param listener
     */
    public void addPropertyChangeListener(PropertyChangeListener listener) {
        propertyChangeSupport.addPropertyChangeListener(listener);
    }

    /**
     * Remove PropertyChangeListener.
     *
     * @param listener
     */
    public void removePropertyChangeListener(PropertyChangeListener listener) {
        propertyChangeSupport.removePropertyChangeListener(listener);
    }

    public void paintComponent(Graphics g) {
        botaoRetornar = new JButton("Botão Retornar");
        botaoRetornar.setVisible(true);
        botaoRetornar.paintComponents(g);
        super.paintComponent(g);

    }
}

e então compilo esta classe e a adiciono à paleta…
porém qndo coloco o compomente MenuBean em um frame, não aparece os componentes. No caso o JButton.
Só desenha um JPanel e mais nada.
O que tá faltando? alguma ideia. Vlw pessoal!
JavaBeans - http://java.sun.com/docs/books/tutorial/javabeans/TOC.html

2 Respostas

Alexandre_Saudate

Se você está usando um JPanel para fazer isso, porque não usar o método add() ?

R

Alguns comentários:

  • Você está recriando o botão toda vez que repinta o painel, o que é uma operação lenta e consome memória desnecessariamente. Seria mais adequado criar o botão apenas uma vez, um bom local para isso seria o construtor do painel;

  • Para exibir o botão, insira-o no painel. Para isso, uma boa pedida é definir o gerenciador de layout do painel como FlowLayout. Em seguida, é só inserir o botão no painel através de JPanel.add();

  • Você não precisa chamar setVisible(true) no botão, já que true é o valor padrão para o flag de visibilidade;

  • Você não precisa chamar paintComponent() no botão, já que o container ao qual ele pertence (no caso, o painel) fará isso automaticamente.

Criado 24 de novembro de 2009
Ultima resposta 24 de nov. de 2009
Respostas 2
Participantes 3