Problemas com JPanel

6 respostas
O

Pessoal, estou com um problema no meu JPanel.
Quando eu add um botão, ele só aparece quando eu passo o mouse por cima dele.

public class JFlipPanel extends JPanel implements MouseInputListener, ActionListener, Constantes {

public JFlipPanel() {
    super();
    setLayout(null);

    JButton botao = new JButton("SAIR");
    botao.setBounds(1115,130,60,30);
    this.add(botao);
}

public void paintComponent(Graphics g) {
...
}
}

Alguém sabe pq o botão não aparece na tela?
Eu tbm tenho outros objetos na tela.

6 Respostas

tnaires

Tente chamar o método repaint() do JPanel após o setBounds() do botão:

JButton botao = new JButton("SAIR"); botao.setBounds(1115,130,60,30); this.repaint();

ViniGodoy

Seu painel tem coordenadas de x maiores que 1115???

O

Então tnaires, eu coloquei o repaint e não deu certo.
Até pq eu add o botão logo no construtor.

Vini, eu não defino o tamanho do painel.
Eu add o panel em uma aba do JTabbedPane.
Depois add o JTabbedPane em um JScrollPanel.
Por fim, add o scrollpane no frame.

private void initComponents() {
      //crio o mainPanel
      private javax.swing.JPanel mainPanel;

      //crio o objeto da minha classe que extends JPainel (que está dando problema)
      public static JFlipPanel m_FLIPPAINEL = new JFlipPanel();

      JTabbedPane tabs = new JTabbedPane();

      //adiciono minhas classes JPainel no JTabbedPane
      tabs.addTab("Selecionar", m_TELASELECIONA);
     tabs.addTab("Navegar/Cadastrar", m_FLIPPAINEL);
     tabs.addTab("Segmentar", imageLabelJornal);

     scrollPane.setViewportView(tabs);

     org.jdesktop.layout.GroupLayout mainPanelLayout = new org.jdesktop.layout.GroupLayout(mainPanel);

     mainPanelLayout.setHorizontalGroup(
            mainPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(scrollPane, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 549, Short.MAX_VALUE)
        );
     mainPanelLayout.setVerticalGroup(
            mainPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(scrollPane, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 320, Short.MAX_VALUE)
        );
}

Onde será que está o problema?

ViniGodoy

Você não define o tamanho do panel, mas está pedindo para seu JButton se desenhar a partir da coordenada 1115. Se seu painel for menor que isso, o botão estará desenhado fora da área visível do painel, e, portanto, não aparecerá.

Sugestão: Pare de usar setBounds e aprenda a trabalhar com layout managers. Além de evitar erros como esse, ele ainda tornará sua aplicação redimensionável e mais resistente à mudanças de plataforma.

O

Entendi.
Vc tem algum exemplo de layout managers Vini?

Obrigado

Marky.Vasconcelos

Tem o MigLayout…

E to devendo um tutorial dele que me pediram.

Criado 15 de outubro de 2009
Ultima resposta 16 de out. de 2009
Respostas 6
Participantes 4