SOCORRO! Applet dentro de JFrame

17 respostas
Andresams

Bom dia!

Estou tentando há horas colocar um Applet dentro de um Jframe, mas ele não pode cobrir o JFrame inteiro, apenas ficar no centro dele. Já tentei usar com um JPanel e nada :frowning:

Alguém sabe me ajudar? Obrigada!

17 Respostas

_Renatu

Olá

Segundo a documentação, os Applets e os JApplets herdam características de java.awt.Panel.

Portanto eles são componentes gráficos, e podem ser tratados como tais.

Como pelo jeito eles são awt, você já tentou usar janelas awt ao invés de Swing?

Se continuar difícil, poste seu código pra gente ver.

rockstorm

Você pedindo socorro assim, não vai conseguir muita coisa aqui no forum…
Coloque o código e erros para podermos avaliar…

ViniGodoy

Uma regra de ouro: não misture AWT com Swing.

Os componentes da AWT sempre sobrepõe os do Swing. Se você tem controle do Applet, substitua-o por um JApplet. Se não tem controle, faça como o colega falou e substitua a janela e os seus componentes por AWT.

PS: Pedir socorro é mesmo falta de educação no fórum.

Andresams

Não não, não tem erro algum, é que das formas que eu tentei não está correto, acho que vou ter que criar um frame interno ao frameprincipal e carregar o Applet dentro dele, isto está certo, não?

Andresams

Ah sim e desculpem-me com relação à “falta de educação”, apenas não me expressei bem. Sou usuária há mais de 5 anos em outro grande fórum e isso é normal, mas cada tribo com seus rituais.

ViniGodoy já fiz das duas formas: criei um FRAME AWT e também um JApplet, já que eu já tinha o Applet e o JFrame. Mesmo assim, ainda não sei como colocar o Applet/JApplet dentro do Frame/JFrame.

_Renatu

Hm…

Componentes ocuparem todo o espaço da tela, ou ocupar só uma parte, pode ser problema de gerenciador de layout. Já tentou ver isso também?

Faz um teste. Coloque o gerenciador como null, e posicione seu componente “manualmente”.

Andresams

A função construtora da minha classe MeuFrame:

MeuFrame()
{
super("Trabalho de Ordenação");
ap= new OrdenacaoApplet();
ap.setBounds(0,0,200, 200);
//this.add(ap);
this.setBounds(0,0,500,300);
setResizable(false);
show();
}

Agora ele exibe o FRAME (AWT) em branco e não dá nenhum erro (NetBeans).

Comecei a aprender JAVA há poucos dias, comercialmente eu programo em PHP.

_Renatu

sim, ele exibe em branco porque voce nao adicionou o applet ao seu frame…

voce tem que tirar o comentario de “//this.add(ap)” para o applet ser adicionado ao frame…

Andresams

Nâo não, eu já fiz com e sem o this.add(ap) e o resultado é o mesmo, por isso eu comentei.

T

Que confusão é essa?

Um Applet ou JApplet depende de um ambiente especial que normalmente só é encontrado em um browser, ou no AppletViewer (um programa que finge que é um browser e passa os parâmetros adequados para um Applet ou JApplet executar.). Se você não tiver esse ambiente especial, ele não funciona direito.

Normalmente você não põe um Applet ou JApplet dentro de um JFrame, que é mais usado em aplicações stand-alone ou Java Web Start.

Usualmente um Applet ou JApplet é um container (como se fosse um JFrame) onde você põe JPanels e outras coisas; não o contrário. (Um Applet ou JApplet pode chamar um JDialog, por exemplo).

Se você quiser hospedar uma Applet ou JApplet dentro de um JFrame, pegue o código-fonte do AppletViewer e o estude, porque não é trivial. O código-fonte pode ser baixado do site da Sun, dentro dos fontes do JDK (não é em src.zip).

Andresams

Thiagol, eu vi isso feito já uma vez e foi por um programador que sabe menos de Java do que eu. Não acredito que ele tenha baixado o código fonte do AppletViewer (se é que ele sabe o que é isso) e estudado-o.

Com certeza tem um jeito de fazer.


CHENGANDO NA RESPOSTA

Agora que eu finalmente descobri o jDesktopPane, eu sei que posso adicionar frames internos e, em um desses frames, carregar o applet no frame inteiro :smiley: (Vi nos exemplos do Swing que vem no JDK).

Mas mesmo assim, ainda não consegui. Eu criei um JInternalFrame dentro de um jDesktopPanel visualmente no NetBeans, e nem isso ele quer mostrar (tentei com e sem colocar o JApplet dentro). Eu precisava ter feito mais alguma coisa?

T
import java.awt.*;
import javax.swing.*;
import java.applet.*;

// Se hospedar uma JApplet dentro de um JFrame deste jeito, os métodos start, stop e destroy
// nunca serão chamados corretamente. Você tem de tomar conta disso para que uma applet de verdade
// possa rodar dentro de um JFrame. Tal como está neste código, ele simplesmente visualiza
// a applet, mas não deve funcionar direito. 

class MeuApplet extends JApplet {
    public MeuApplet () {
        super();
        JLabel lbl = new JLabel ("Dentro da applet");
        lbl.setBorder (BorderFactory.createLineBorder (Color.RED));
        add (lbl, BorderLayout.CENTER);
    }
}

class TesteInclusaoApplet extends JFrame {
    private MeuApplet meuApplet;
    public TesteInclusaoApplet() {
        super ("Teste de Inclusão de Applets");
        setBounds (0, 0, 200, 200);
        JLabel lbl = new JLabel ("Fora da applet");
        lbl.setBorder (BorderFactory.createLineBorder (Color.BLUE));
        add (lbl, BorderLayout.NORTH);
        meuApplet = new MeuApplet();
        add (meuApplet, BorderLayout.CENTER);
    }
    public static void main(String[] args) {
        TesteInclusaoApplet ta = new TesteInclusaoApplet ();
        ta.setVisible (true);
    }
}

E por favor não use JDesktopPane à toa, só porque tem na documentação.
Você vai ver que ele é difícil de usar e deixa suas aplicações com cara de aplicações Windows de 20 anos atrás (modelo MDI).
Não se usa mais isso.

Sami_Koivu

Como o thingol falou, o applet depende do ambiente do browser. Eu já fiz um teste uma vez, pondo o applet do Pool do Yahoo! Games para rodar no meu eclipse (dentro de um JFrame), mas não foi super trivial, tive que acrescentar umas 300 linhas de código para fornecer todas as coisas que o applet precisava (acessar recursos externos, chamar os init, start, etc). Eu passaria meu teste como exemplo, mas não está na maquina onde estou no momento.

Andresams

Da mesma forma que eu perguntei sobre o Applet/Frame, é possível colocar um Applet dentro de outro? Alguém sabe como eu poderia fazer isso?

T

Incluir um applet dentro de outro é possível depois de você aprender a incluir um applet dentro de um JFrame. É que um Applet ou um JApplet é basicamente um Panel (não exatamente um JPanel), mas com algumas particularidades a mais. Leia o javadoc de JApplet ou de Applet, para ver que ele herda de Panel.

De qualquer maneira, pôr um applet dentro de outro cheira um pouco podre - não parece que vai funcionar direito.

ViniGodoy

Ah sim… seu setBounds não vai funcionar a menos que você dê um setLayout(null);

Caso contrário, você estará usando o FlowLayout ou o GridBadLayout. E eles redimensionarão seu JApplet.

Andresams

Muito obrigada por todas as respostas, viu!

Eu preferia colocar meu JApplet dentro de um JFrame porque senão eu teria que modificar muitas coisas no Layout, mas agora eu prefiro fazer isso, é mais semântico ^^

Obrigada mesmo!

Criado 14 de novembro de 2007
Ultima resposta 14 de nov. de 2007
Respostas 17
Participantes 6