Applet na stronie problem z JFrame

0

Mam trochę dziwny problem stworzyłem prosty przykład dla testu by sprawdzić jak zachowuje się applet na stronie i to co jest dziwnego to to że jak wchodzę pierwszy raz na stronę wszystko jest oki ale jak cofnę i znowu wrócę to JFrame nie chce się odświeżyć zastanawiałem się czy mam go niszczyć przy wychodzeniu ze strony? samo JFrame się psuje wewnątrz strony wszystko jest oki

import java.awt.Color;
import javax.swing.ImageIcon;
import javax.swing.JApplet;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class test27 extends JApplet {
public static JFrame okno = new JFrame();
public static JLabel A = new JLabel();
public static JLabel B = new JLabel();
public static ImageIcon ico2 = new ImageIcon();

@Override public void init(){
        okno.setVisible(true);
        okno.setBounds(100, 100, 400, 300);
        okno.setLayout(null);
       
        A.setBounds(75, 75, 70, 70);
        A.setBackground(Color.red);
        A.setOpaque(false);

        B.setBounds(100, 100, 70, 70);
        B.setBackground(Color.green);
        B.setOpaque(true);
        okno.add(A); okno.add(B);         
    }
}

0

Dziwnie napisałeś ten aplet. Po co Ci ten JFrame? Przeglądarka chyba nad nim nie panuje, kontroluje to co rysujesz na stronie. Rozmiar ustalasz w parametrach znacznika aplet. Plik graficzny też musisz odczytywac inaczej.

import java.awt.Color;
import javax.swing.ImageIcon;
import javax.swing.JApplet;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class test27 extends JApplet {


@Override public void init(){
        setLayout(null);
        JLabel A = new JLabel();
        JLabel B = new JLabel();

        //ImageIcon ico2 = new ImageIcon();

        A.setBounds(75, 75, 70, 70);
        A.setBackground(Color.red);
        A.setOpaque(false);

        B.setBounds(100, 100, 70, 70);
        B.setBackground(Color.green);
        B.setOpaque(true);
        add(A);
        add(B);
    }
}
<applet code="test27.class" width="400" height="300">
</applet>
0

Jeżeli koniecznie musisz mieć JFrame, to przenieś jego tworzenie do metody start(), która jest uruchamiana przed pierwszym wyświetleniem i przed każdym powrotem na stronę.

import java.awt.Color;
import javax.swing.ImageIcon;
import javax.swing.JApplet;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class test27 extends JApplet {

private JFrame okno;
@Override public void start(){
        okno=new JFrame();
        okno.setLayout(null);
        okno.setBounds(100,100,400,300);
        JLabel A = new JLabel();
        JLabel B = new JLabel();

        //ImageIcon ico2 = new ImageIcon();

        A.setBounds(75, 75, 70, 70);
        A.setBackground(Color.red);
        A.setOpaque(true);

        B.setBounds(100, 100, 70, 70);
        B.setBackground(Color.green);
        B.setOpaque(true);
        okno.add(A);
        okno.add(B);
        okno.setVisible(true);
        okno.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
    }
    //------------------------
    public void stop()
    {
        okno.dispose();
    }

}
0

zrobiłem poprawki ale dalej jest ten sam efekt przeniesienie do metody start() nic nie pomaga

import javax.swing.JApplet;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.*;

public class testparametry extends JApplet {
    public static JFrame okno = new JFrame();
    public static JLabel A = new JLabel();
    public static JLabel B = new JLabel();

    @Override public void init(){
 
    }
    @Override public void start()
    {
        okno.repaint();
        String login = getParameter("login");
        String password = getParameter("password");
        okno.setTitle("login1="+login+" password="+password);

        okno.setVisible(true);
        okno.setBounds(100, 100, 400, 300);
        okno.setLayout(null);

        A.setBounds(75, 75, 70, 70);
        A.setBackground(Color.red);
        A.setOpaque(false);

        B.setBounds(100, 100, 70, 70);
        B.setBackground(Color.green);
        B.setOpaque(true);
        okno.add(A); okno.add(B);
    }
    @Override public void stop()
    {
        okno.dispose();
    } 
}

user image

0

Twoje poprawki są lekko bez sensu. W metodzie destroy() niszczysz okno, a w metodzie start() wywołujesz jego metodę repaint(). Przyjrzyj się mojemu kodowi, ja w metodzie start() tworzę okno.

0

dziekuje działa przepraszam nie zwróciłem uwagi :)

pytanie jeszcze takie drobne czy ze wszystkimi typami trzeba tak robić jak z JFrame? tzn. int String JLabel itp? :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1