Nicht nachvollziehbares Verhalten

fsicher

Bekanntes Mitglied
Hallo

Ich bin zur Zeit mit einem nicht nachvollziehbaren Verhalten im Java-Code konfrontiert.

Beispiele:

- frame.add(myComponent) funktioniert nicht, aber
- frame.getContentPane().add(myComponent) funktioniert!!!

Seit (meines Wissens) jdk 1.5 ist der Aufruf der Methode getContentPane in einem JFrame nicht nötig!

- Komponenten in einem JFrame werden nicht sichtbar gemacht. Macht man eine "resize" Aktion, werden diese angezeigt (sichtbar)

- ein JPanel (View) wird nicht refresht! Versucht man es im Debug-Modus zu entziffern, wird 'refresh' gemacht.

Ich halte mich nicht für einen Anfänger, aber ich verstehe es nicht.

Ich arbiete mit Windows 7 (64 Bit), JDK 1.6 U22 (Win64bit) und eclipse (Helios 64 bit).

Hat noch jemand so was beobachten können, oder bin ich der einzige?

Danke
 
Zuletzt bearbeitet:
Hier ein Beispiel:

Java:
public class DemoFrame {

	public static void main(String[] args) {
		JFrame myFrame = new JFrame("DemoFrame");
		myFrame.setSize(400, 300);
		
		myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		myFrame.getContentPane().setLayout(null);
		myFrame.setLocationRelativeTo(null);

		JLabel lblA = new JLabel("Start-Wert: ");
		lblA.setBounds(40, 60, 100, 25);
		myFrame.add(lblA);

		JTextField txtA = new JTextField(100);
		txtA.setBounds(180, 60, 200, 25);
		myFrame.add(txtA);

		JLabel lblB = new JLabel("End-Wert:  ");
		lblB.setBounds(40, 100, 100, 25);
		myFrame.add(lblB);
		
		JTextField txtB = new JTextField(100);
		txtB.setBounds(180, 100, 200, 25);
		myFrame.add(txtB);
		
		myFrame.setVisible(true);
	}
}

Es passiert ab und zu, dass nur 'lblA' angezeigt wird. Wenn ich eine 'resize' Action mache, werden die restlichen Komponenten angezeigt.
 
Hilft das?
Java:
public static void main(String[] args) 
{
    SwingUtilities.invokeLater(new Runnable()
    {
        public void run()
        {
            dieAlteMain();
        }
    });
}

private static void dieAlteMain()
{
    JFrame myFrame = new JFrame("DemoFrame");
    ...
}
 
Defaultmaessig verwendet JFrame ein BorderLayout. Ich glaube du solltest den LayoutManager nicht auf "null" setzten sondern expliziet einen LayoutManager nach deinen Wuenschen setzten.

Ansonsten ist das Ergebnis unvorhersehbar.
 
@Marco
Habe mit Swing.Utilities ... versucht, leider hat auch dies nicht geholfen. Habe anschliessend jdk & eclipse neu installiert und jetzt funktioniert es wieder (hoffe, bleibt auch so).

Zu der Behauptung: null-Layout sei selten sinnvoll ...

Wenn ich ein "komplexes" Layout (viele Komponetnen auf einer Seite) haben muss, das ich von Hand programmieren möchte / muss, finde ich null-Layout an sich gar nicht so schlecht. Wieso meinst du, dass es "selten sinnvoll" ist?
 
Zuletzt bearbeitet:
Es ist nicht resizable. Das mag bei kleineren GUIs kein Problem sein, aber wenn du eine größere Oberfläche hast, dann kann es Probleme geben, wenn der Monitor des Benutzers zu klein ist oder die von dir gewählte Größe dem Benutzer nicht gefällt.
 

Neue Themen


Zurück
Oben