Java-апплет не отображается в браузере

Привет, у меня есть Java-апплет. В Eclıpse он работает отлично и отображает все элементы Swing, но когда я встраиваю его в html, апплет не отображается или отображает только несколько элементов в браузере. Ниже мой код. Может ли кто-нибудь помочь мне с моей проблемой?

import java.applet.Applet;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.SwingConstants;

import java.applet.*;
import java.net.*;
public class TestApplet extends JApplet implements ActionListener {

    Button talkToAllButton;
    Button sendPhotoToAll;
    int Tikla1Basim, Tikla2Basim;
    JLabel header;

    JLabel statusLabel;
    JLabel posLabel;
    JLabel idLabel;
    JLabel iDLabel;
    JLabel heartRateLabel;
    JLabel heartRateLabel2;
    JLabel backgroundLabel;
    JButton sendPicButton;
    JButton talkOnOffButton;
    public void init() {

        this.setLayout(null);
        setSize(1200, 900);


        idLabel=new JLabel(new ImageIcon(getImage(getDocumentBase(), "res/call_sign.png")));
        idLabel.setFont(new Font("Serif", Font.BOLD, 20));
        idLabel.setBackground(Color.white);
        idLabel.setForeground(Color.black);
        idLabel.setOpaque(true);
        idLabel.setBounds(getWidth()-190,200,180,50);
        //idLabel.setBorder(border);
        add(idLabel);

        iDLabel=new JLabel("NONE",JLabel.CENTER);
        iDLabel.setFont(new Font("Serif", Font.BOLD, 20));
        iDLabel.setBackground(new Color(36,48,24));
        iDLabel.setForeground(Color.WHITE);
        iDLabel.setOpaque(true);
        iDLabel.setBounds(getWidth()-190,250,180,50);
        //iDLabel.setBorder(border);
        add(iDLabel);

        statusLabel=new JLabel(new ImageIcon(getImage(getDocumentBase(), "res/status_alive.png")));
        statusLabel.setFont(new Font("Serif", Font.BOLD, 20));
        statusLabel.setBackground(Color.green);
        statusLabel.setForeground(Color.black);
        statusLabel.setOpaque(true);
        statusLabel.setBounds(getWidth()-190,300,180,50);
        //statusLabel.setBorder(border);
        add(statusLabel);

        posLabel=new JLabel("NO DATA");
        posLabel.setFont(new Font("Serif", Font.BOLD, 20));
        posLabel.setHorizontalAlignment(SwingConstants.CENTER);
        posLabel.setBackground(Color.green);
        posLabel.setForeground(Color.WHITE);
        posLabel.setOpaque(true);
        posLabel.setBounds(getWidth()-190,350,180,70);
        //posLabel.setBorder(border);
        add(posLabel);

        heartRateLabel=new JLabel(new ImageIcon(getImage(getDocumentBase(), "res/hearth_rate.png")));
        heartRateLabel.setFont(new Font("Serif", Font.BOLD, 20));
        heartRateLabel.setBackground(Color.red);
        heartRateLabel.setForeground(Color.black);
        heartRateLabel.setOpaque(true);
        heartRateLabel.setBounds(getWidth()-190,450,180,50);
        //heartRateLabel.setBorder(border);
        add(heartRateLabel);

        heartRateLabel2=new JLabel("NO DATA",JLabel.CENTER);
        heartRateLabel2.setFont(new Font("Serif", Font.BOLD, 20));
        heartRateLabel2.setBackground(new Color(180,2,2));
        heartRateLabel2.setForeground(Color.WHITE);
        heartRateLabel2.setOpaque(true);
        heartRateLabel2.setBounds(getWidth()-190,500,180,50);
        //heartRateLabel2.setBorder(border);
        add(heartRateLabel2);

        sendPicButton=new JButton(new ImageIcon(getImage(getDocumentBase(), "res/send_pic.png")));
        sendPicButton.setFont(new Font("Serif", Font.BOLD, 20));
        sendPicButton.setBackground(Color.red);
        sendPicButton.setForeground(Color.black);
        sendPicButton.setOpaque(true);
        sendPicButton.setBounds(getWidth()-190,580,180,50);
        //sendPicButton.setBorder(border);
        add(sendPicButton);
        sendPicButton.addActionListener(this);

        talkOnOffButton=new JButton(new ImageIcon(getImage(getDocumentBase(), "res/talk_off.png")));
        talkOnOffButton.setFont(new Font("Serif", Font.BOLD, 20));

        talkOnOffButton.setOpaque(true);
        talkOnOffButton.setBounds(getWidth()-190,650,180,50);
        //talkOnOffButton.setBorder(border);
        add(talkOnOffButton);
        talkOnOffButton.addActionListener(this);
        //***********************************************************
        //isFpsLimited = true;
        backgroundLabel=new JLabel(new ImageIcon(getImage(getDocumentBase(), "res/bg.png")));
        backgroundLabel.setOpaque(true);
        backgroundLabel.setBounds(getWidth()-200,0,200,800);
        add(backgroundLabel);

        ImageIcon headerImg=new ImageIcon(getImage(getDocumentBase(),"res/erlink_header.png"));
        header=new JLabel(headerImg);
        header.setBounds(-45, -40, 1800, 200);

        add(header);
        sendPhotoToAll = new Button("Send Photo(All)");
        sendPhotoToAll.setBounds(850,40, 150, 50);
        header.add(sendPhotoToAll);
        talkToAllButton = new Button("Talk(All)");
        talkToAllButton.setBounds(850,90, 100, 50);
        header.add(talkToAllButton);

        sendPhotoToAll.addActionListener(this);
        talkToAllButton.addActionListener(this);
        /*sendPhotoToAll.setLocation(10, 10);
        sendPhotoToAll.setSize(150, 30);

        talkToAllButton.setLocation(10, 40);
        talkToAllButton.setSize(250, 30);*/

    }

    public void actionPerformed(ActionEvent event) { 
    //event things
    }
    // TODO overwrite start(), stop() and destroy() methods
}

person dramaticlook    schedule 04.07.2012    source источник
comment
См. урок: Java-апплеты   -  person user1329572    schedule 05.07.2012
comment
Не смешивайте AWT с компонентами Swing без уважительной причины. Button -> JButton. Я вижу ваш графический интерфейс на экране, но мне трудно поверить, что именно так вы хотите расположить компоненты. Можете ли вы предоставить ASCII-графику или рисунок того, как должен выглядеть графический интерфейс?   -  person Andrew Thompson    schedule 05.07.2012


Ответы (1)


  1. Используйте макеты.
  2. Вызовите validate() после добавления всех компонентов.
  3. Создайте графический интерфейс на EDT. Дополнительные сведения см. в разделе Параллелизм в Swing.
person Andrew Thompson    schedule 04.07.2012
comment
Но я видел примеры без макетов. На самом деле отказ от использования макетов значительно облегчит мою работу. У меня вверху большой баннер шириной во весь апплет, а справа список кнопок. Я не уверен, что я делаю неправильно здесь, чтобы не использовать макеты. - person dramaticlook; 05.07.2012
comment
Но я видел примеры без макетов. Это плохие примеры. Игнорируй их. На самом деле отказ от использования макетов значительно облегчит мою работу. Нет, не облегчит. Конечно, во время разработки, но как только вы развернете, все «развалится». Это то, на что поставщики тех «примеров», которые вы видели, не указали. Если вы разрабатываете графический интерфейс Java для развертывания для 2 или более человек, макеты необходимы. См. setLayout(null) никогда не требуется. Навсегда! подробнее.. - person Andrew Thompson; 05.07.2012
comment
..и в сторону. Вы говорите «проще», но задали здесь вопрос о том, как исправить «случайные ошибки» в графическом интерфейсе. Кажется, что использование макетов null уже замедляет разработку. - person Andrew Thompson; 05.07.2012
comment
Да вроде ты прав. Я собираюсь завершить апплет. Я хочу задать еще один вопрос, просто чтобы узнать ваше мнение об этом. У меня есть пустой прямоугольник в апплете, и я хочу разместить javascript, используя API Google Maps3. Как вы думаете, будет ли лучший способ встроить это в мой апплет? - person dramaticlook; 05.07.2012
comment
У Java есть ScriptEngine, но я сомневаюсь, что этого будет достаточно для поддержки карт Google. Это БОЛЬШОЙ вопрос.. ;) - person Andrew Thompson; 05.07.2012