[Java] Applet repaint niet

Pagina: 1
Acties:

  • im_ik
  • Registratie: November 2000
  • Laatst online: 28-12-2025

im_ik

dat ben ik dus

Topicstarter
Heb net eve een testje gemaakt om het probleem te kunnen simuleren.
Hier wat code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class TestA extends JApplet
{
    public void init()
    {
        TestA a = new TestA();
        a.start(true);
    }
    public static void main(String[] args)
    {
        TestA a = new TestA();
        a.start(false);
    }
    public void start(boolean isApplet)
    {
        JFrame logon = new Logon(this,isApplet);
        logon.show();
    }
    public void go(boolean isApplet)
    {
        if(isApplet)
        {
            System.out.println("Applet");
            JApplet k =new App();
            getContentPane().add(new App());
            //repaint();                        // <======== doet nix !!
        }
        else
        {
            System.out.println("Application");
            JFrame app=new JFrame("Test Application");
            app.getContentPane().add(new App());
            Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
            app.setBounds(screenSize.width/2-100, screenSize.height/2-120,180,100);
            app.show();
        }
    }
}
class App extends JApplet
{
    App()
    {
        getContentPane().add(new JButton("test"));
    }
}
class Logon extends JFrame implements ActionListener
{
    private JButton test;
    private boolean isApplet;
    private Dimension screenSize;
    TestA parent;
    Logon(TestA parent,boolean isApplet)
    {
        this.parent=parent;
        this.isApplet=isApplet;
        screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        setBounds(screenSize.width/2-100, screenSize.height/2-120,200,120);
        test=new JButton("go");
        test.addActionListener(this);
        getContentPane().add(test);
    }
    public void actionPerformed(ActionEvent evt)
    {
        parent.go(isApplet);
        dispose();
    }
}

Het gaat fout waar staat "doet nix !!" in een application doet hij het wel goed, Maar als je hem als Applet opstart
dan repaint hij de applet niet...
Zie ik nou hier is over het hoofd..
Of maak ik gewoon een dikke denk fout :)

edit: Was weer eens iets te onduidelijk.
Het is de bedoeling dat er een Frame'je wordt opgestart (Logon)..dit gaat goed :)
En als je dan op oke drukt :
Dan als je het als hem normaal draait een Jframe met daarin de class App (dit werkt wel)
En als je in een applet draait dat hij de class App in de Applet zet.
Dit werkt niet behalve als je die (2)regels in de init() zet..

Atari Terminator AI - LegoBlockX3 = ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᣳᣝᐤᣜᣳ.ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ.T008ᖟ


  • Scorpion
  • Registratie: April 2000
  • Laatst online: 18-01-2024

Scorpion

not to lame to read BitchX.doc

1. welke vm gebruik je om te testen? (test het met appletviewer)
2. als je het in ie/ns/opera test, test dan wel met de jdk1.3 plugin. (japplet = swing = jdk1.3, browsers supporten jdk 1.1)

  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

code:
1
2
3
4
5
public void init()
    {
        TestA a = new TestA();
        a.start(true);
    }

verander dat eens in:
code:
1
2
3
4
public void init()
    {
        this.start(true);
    }

  • im_ik
  • Registratie: November 2000
  • Laatst online: 28-12-2025

im_ik

dat ben ik dus

Topicstarter
jvm 1.3.0 onder windows.
En om de applet te testen gebruik ik de appletviewer.

this.start(true);

oke is wat netter maar geeft nog geen resultaat.
Als je "getContentPane().add(new App());" in de init zet.
dan zie je wat ik wil berijken..

Atari Terminator AI - LegoBlockX3 = ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᣳᣝᐤᣜᣳ.ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ.T008ᖟ


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Over het algemeen is bij normaal gebruikt repaint absoluut niet nodig. Misschien is het dus een goed idee om eens te kijken of je zonder kan?

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • im_ik
  • Registratie: November 2000
  • Laatst online: 28-12-2025

im_ik

dat ben ik dus

Topicstarter
Ik wil die repaint() ook niet gebruiken..
Maar ik wil iets toevoegen aan de ContentPane buiten de init()
Maar java doet er helemaal nix mee :'(

Atari Terminator AI - LegoBlockX3 = ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᣳᣝᐤᣜᣳ.ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ.T008ᖟ


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Snap...

Een aardige oplossing zou zijn om een zelf-geimplementeerd modal JDialog te gebruiken (dat kwam pas langs ;) ) en de login procedure dus niet de go-methode aan te laten roepen.
Je probleem is dan in principe opgelost en je design is dan ook gelijk iets fraaier. Verder is dat gevalsonderscheid in de go-methode ook niet zo heel erg prettig. Beter is het misschien om de opbouw gewoon in de init of de main te doen en de specifieke delen via methoden te doen in een generieke klasse.

Een makkelijke oplossing (misschien werkt ut) is om setContentPane(...) te gebruiken ipv getContentPane().add(...)

Jouw probleem zou trouwens extreem fraai opgelost kunnen worden met m'n WindowEnvironment ;) . Ik heb zelf een soort factory gemaakt voor windows, die werkt met WindowHandle. Alles is een WindowHandle: JFrame, JDialog, JInternalFrame, JApplet. Je kunt nu dus je applicatie volledig onafhankelijk schrijven van de omgeving waarin hij draait (Applet, JDesktopPane, Native frames). Helaas heb ik nooit serieus gewerkt aan de applet variant omdat ik nooit applets schrijf...

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • im_ik
  • Registratie: November 2000
  • Laatst online: 28-12-2025

im_ik

dat ben ik dus

Topicstarter
Op woensdag 24 oktober 2001 16:54 schreef mbravenboer het volgende:
Snap...

Een aardige oplossing zou zijn om een zelf-geimplementeerd modal JDialog te gebruiken (dat kwam pas langs ;) ) en de login procedure dus niet de go-methode aan te laten roepen.
Je probleem is dan in principe opgelost en je design is dan ook gelijk iets fraaier. Verder is dat gevalsonderscheid in de go-methode ook niet zo heel erg prettig. Beter is het misschien om de opbouw gewoon in de init of de main te doen en de specifieke delen via methoden te doen in een generieke klasse.
Een makkelijke oplossing (misschien werkt ut) is om setContentPane(...) te gebruiken ipv getContentPane().add(...)
Heb draadje gezien morgen eve uitproberen (beiden) :)
Jouw probleem zou trouwens extreem fraai opgelost kunnen worden met m'n WindowEnvironment ;) . Ik heb zelf een soort factory gemaakt voor windows, die werkt met WindowHandle. Alles is een WindowHandle: JFrame, JDialog, JInternalFrame, JApplet. Je kunt nu dus je applicatie volledig onafhankelijk schrijven van de omgeving waarin hij draait (Applet, JDesktopPane, Native frames). Helaas heb ik nooit serieus gewerkt aan de applet variant omdat ik nooit applets schrijf...
Zeker niet uitgebracht onder GPL :+

Ik denk dat ik morgen weer verder kan...
Ik ga nu eve(3/6uur) een server-ruimte 2KM verplaatsen :r

Atari Terminator AI - LegoBlockX3 = ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᣳᣝᐤᣜᣳ.ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ.T008ᖟ


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
im_ik: Zeker niet uitgebracht onder GPL :+
Als ik er tevreden over ben wordt het een licence a la Apache denk ik ;) . Het functioneert nu uitstekend voor een JDesktopPane versus native JFrame/JDialog omgeving. JApplet ben ik ooit eens aan begonnen, maar nooit afgemaakt.

Het werkt in ieder geval erg prettig. Het is fijn als je alle windows op dezelfde manier kan behandelen (er is geen gemeenschappelijke superklasse in Java voor JInternalFrames en JFrame/JDialog). Ook event-handling is transparant (InteralFrameListener + WindowListener -> WindowHandleListener).

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • im_ik
  • Registratie: November 2000
  • Laatst online: 28-12-2025

im_ik

dat ben ik dus

Topicstarter
klikt leuk :)

Ik heb een keer gedacht om me hele gui in een vector of Object-tree te zetten..
Maar nooit aan begonnen..

Atari Terminator AI - LegoBlockX3 = ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᣳᣝᐤᣜᣳ.ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ.T008ᖟ


  • im_ik
  • Registratie: November 2000
  • Laatst online: 28-12-2025

im_ik

dat ben ik dus

Topicstarter
OHHHH JES it werkt.. :)

En hier de code voor mensen met het zelfde prob's
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;


public class St extends JApplet
{
    private CalculatorPanel app;
    private boolean appletWindow=true; // zet op false om Applet in JFrame te laden
    public void init()
   {
       if(appletWindow)
       {
           app = new CalculatorPanel(); // start applet in applet
           Logon th = new Logon(app);
           th.show();
        setRootPane(app);
        }
        else
        {
            ap hoi = new ap(); // start applet in window
        }
   }
   public static void main(String[] args)
   {
        ap hoi = new ap();
   }
}
class Logon extends JFrame implements ActionListener
{                                   // je logaan geval nu very bascic meet allen een "go" button.
    private JButton test;
    private Dimension screenSize;
    private CalculatorPanel parent;
    private JFrame iets;

    Logon(CalculatorPanel parent)
    {
        this.parent=parent;
        initLogon();
    }

    Logon(CalculatorPanel parent,JFrame iets)
    {
        this.parent=parent;
        this.iets=iets;
        initLogon();
    }
    private void initLogon()
    {
        setTitle("Logon");
        screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        setBounds(screenSize.width/2-100, screenSize.height/2-120,200,120);
        test=new JButton("go");
        test.addActionListener(this);
        getContentPane().add(test);
    }

    public void actionPerformed(ActionEvent evt)
    {
        parent.go();
        if (iets != null) // verschill tussen JApplet en Application !!!
            {iets.show();}
        dispose();
    }
}

class ap extends JFrame // wordt allen gebruikt door applicatie zodat he setRootPane kan doen.(=protected)
{
    private CalculatorPanel app;
    public ap()
    {
        super(); // init je JFrame

            app = new CalculatorPanel();

        setTitle("Je Test geval");
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        setBounds(screenSize.width/2-100, screenSize.height/2-120,200,120);
        setRootPane(app);

        Logon th = new Logon(app,this);
           th.show();
    }
}
class CalculatorPanel extends JRootPane // dis je geweldige applicatie die je hebt ontwikkeld ;-)
{
    private JDesktopPane    testDesktop;
    private JMenuBar        mbar;

    public CalculatorPanel()
       {
        super();
         testDesktop = new JDesktopPane();
        testDesktop.setBackground(new Color(134,0,82));
        mbar = new JMenuBar();
        mbar.add(new JMenu("File"));
    }
    public void go()
    {
        setLayeredPane(testDesktop);
        setJMenuBar(mbar);
        revalidate(); // en deze functie zocht ik dus.
    }
}

Sorry voor de erg brakke namen :)
Maar is ook allen een test geweest.

BTW: sorry van het ophalen van zo'n oud topic maar ik wouw het gewoon eve delen met jullie.

Atari Terminator AI - LegoBlockX3 = ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᣳᣝᐤᣜᣳ.ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ.T008ᖟ

Pagina: 1