Jump to content

Adicionar JPanel a JFrame


Cybernavigator
 Share

Recommended Posts

Boas, sou muito novinho em java mas decidi arriscar.

Tenho uma classe que faz extend à classe JFrame, estou a abrir essa JFrame através da função main.

Agora, eu queria desenhar na janela, já vi que posso fazer override a paint e fazer isso, mas gostava de fazer isso num panel à parte.

Então criei mais uma classe que deriva de JPanel.

No construtor da classe que deriva de JFrame faço

this.add(new NovoPainel());

mas, nada acontece.

Já fiz um System.out no @override paint mas não é chamado sequer.

Porque nunca chega a ser gerado, por isso faz sentido não entrar no procedimento.

Já tentei no JFrame fazer this.invalidate() ou this.repaint()

mas nada.

O JPanel não é adicionado.

O que me está a falhar?

Melhores cumprimentos,João Lopes***Esta mensagem foi escrita ao abrigo do novo Acordo Ortográfico***

Link to comment
Share on other sites

Em vez de usares o método add da JFrame usa o do componente raiz que todas as JFrames têm.

this.getContentPane().add(new NovoPainel());

O this será desnecessário, mas todos os componentes têm de ser adicionados ao componente base que a JFrame tem e não à JFrame em si. O mesmo acontece para layouts que queiras definir, devem ser definidos no componente base.

Em princípio, se o resto do código estiver correcto, basta trocares o teu *add* pelo que indiquei e deverá surgir o JPanel, pode existir problemas com o tamanho que tenhas definido, mas deves dar logo por ela.

Link to comment
Share on other sites

Não parece? Se és novo em Java não devias estar a começar pela parte gráfica, devias estar a começar pela base de programação orientada a objectos e pela forma como esse paradigma é implementado em Java. O processo que indiquei acima é composto por uma linha de código, mais simples não podia ser 😉

Como tutoriais tens a documentação das classes que estás a tentar usar, arriscaria até dizer que a linha que coloquei aparece assim na documentação da JFrame. Tens também o tutorial da Oracle, http://download.oracle.com/javase/tutorial/reallybigindex.html .

O seguinte código exemplo cria uma classe que estende de JFrame, e adiciona um JPanel a essa classe com um fundo vermelho.

package javaapplication99;

import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Demo extends JFrame {

    public Demo() {
        super("Demo");

        JPanel jp = new JPanel();
        jp.setBackground(Color.RED);

        //única parte necessária, adicionar o painel à raiz da JFrame
        getContentPane().add(jp);

    }

    public static void main(String[] args) {
        new Demo().setVisible(true);
    }

}
Link to comment
Share on other sites

Não sei o que é o initComponents... o único método que conheço com esse nome é o que o NetBeans IDE cria e que não deve ser alterado porque é usado pelo editor automaticamente.

O exemplo que coloquei é isso mesmo, um exemplo simples de como adicionar um JPanel. Não tem em consideração qualquer layout, ou outras opções que deveriam ser colocadas.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.