Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Java » Komponenten werden wahlfrei falsch dargestellt

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
21.07.2007, 04:09 Uhr
Lensflare



Hallo.

ich hab schon mehrere GUIs mit java erstellt und habe immer das selbe Problem:

Wenn ich das programm ausführe kommt es oft vor, dass einige komponenten verschoben sind oder verschwunden.
Beim nächsten starten sind sie wieder da, dann wieder weg. Es sind nicht mal die selben Komponenten, die verschwinden.

Hier ist ein Beispielcode, wie ich meine GUI immer aufbaue.

Den Container "dummy" muss ich am ende einfügen und entfernen, weil sonst die letzte hinzugefügte komponente falsch dargestellt wird (keine Auhnung warum).

Wenn man das Programm nun mehrmals ausführt, sieht man, dass immer wieder andere Buttons falsch dargestellt werden.


C++:
import javax.swing.*;

import java.awt.*;
import java.awt.event.*;

public class GUI_Test extends JFrame implements ActionListener
{
    private JButton button[] = new JButton[20];
    
    Container dummy = new Container();
    
    public GUI_Test()
    {
        this.addWindowListener(new WindowQuitter());
        this.setVisible(true);
        this.setTitle("Test");
        this.setBounds(10, 10, 200, 200);
        
        for(int i=0; i<20; i++)
        {
            button[i] = new JButton("Button "+i);
            button[i].setBounds(10, i*30, 150, 25);
            this.getContentPane().add(button[i]);
        }
        
        this.getContentPane().add(dummy);
        this.getContentPane().remove(dummy);
        
        this.getContentPane().setPreferredSize(new Dimension(300,650));
        this.pack();
        
        //wenn man die fenstergröße setzt, statt die preferredSize des containers und dann das fenster zu packen, passiert mit den buttons trotzdem das selbe.
        //this.setSize(new Dimension(300,650));
    }
    
    public void actionPerformed(ActionEvent evt)
    {
        //...
    }
    
    public static void main(String args[])
    {
        new GUI_Test();
    }
    
    class WindowQuitter extends WindowAdapter
    {
      public void windowClosing(WindowEvent e)
      {
        System.exit(0);
      }
    }
}



Hab das von einer anderen Person kompilieren lassen und sie hat mir den Effekt bestätigt.

Bei google habe ich nichts zu diesem Problem gefunden.

Wenn mir jemand weiterhelfen könnte, wäre ich sehr dankbar.
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.07.2007, 11:05 Uhr
Blubber2063



Hmm, ohne mir das jetzt ganz genau anzuschauen, aber mit absoluten Positionen sollte man nicht arbeiten, entweder du nimmst dir nen Designer oder oder du schreibst die GUI selbst mit Layout Managern, das ist wesentlich sinnvoller, weil du auch das vergrößern und verkleinern der GUI damit recht gut beschreiben kannst.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
22.07.2007, 01:18 Uhr
Lensflare



Ja das stimmt schon. Ich habe zuerst gedacht, dass es an den Layouts liegt, also habe ich absolute Koordinaten verwendet. Aber das spielt keine Rolle, die Komponenten spinnen trotzdem.

Ich habe das Problem, seit ich die Komponenten mit dem "J" verwende, das sind die von Swing glaube ich.
Hab mir schon überlegt, ob ich da nicht was miteinander vermische. Weil ich ein ähnliches Problem hatte, als ich normale Buttons (keine JButtons) in InternalJFrame (oder JInternalFrame) verwendet hatte.
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
22.07.2007, 03:47 Uhr
Lensflare



Hab mal aus neugier alles Mögliche für Content Pane ausprobiert und tatsächlich! Es funktioniert, wenn man ein JLabel als Content Pane einstellt
Ich frage mich jedoch, wieso das nicht standardmäßig so ist bei einem JFrame


C++:
this.setContentPane(new JLabel());


--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Java ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: