JTable wird nicht immer angezeigt

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo zusammen,

ich arbeite mich gerade in Tabellen mit ScrollPanes ein. Klappt sdoweit auch. Nur, das komische ist, dass - wenn ich untenstehenden Code ausführe - manchmal nur das leere Fenster und mal das Fenster mit dem Inhalt (also der scrollbaren Tabelle) angezeigt wird. Woran liegt das?

Hier mal der Code:

Code:
import java.awt.*;
import javax.swing.*;

public class Main extends JFrame
{
	public Main() 
	{
		setTitle("Testwiese - Tabellen");
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		setSize(400,300);
		setVisible(true);
	}
	
	public void createTable()
	{
		JTable table = new JTable(20,5);
		JScrollPane scroller = new JScrollPane(table);
		
		table.setVisible(true);
		scroller.setVisible(true);
		this.add(scroller);
	}
	
	
	public static void main(String[] args) 
	{
		Main app = new Main();
		app.createTable();
	}
}

Und wie immer bei mir: Ich ferue mich auch über Hinweise/Tipps, die über meine gestellten Probleme/Fragen hinausgehen!!!
 
was heißt denn bei dir 'manchmal', bekommst du wirklich manchmal direkt beim Start die Tabelle zu sehen?
dann Glückwusch,

ich sehe da eher ein deterministisches Verhalten:
da du die Tabelle erst nach setVisible(true) einfügst, ist sie beim Start NIE zu sehen,

erst wenn du z.B. die Größe änderst oder so, dann ist sie IMMER zu sehen,

Lösung:
Tabelle VOR setVisible(true) einfügen oder validate(); nach dem Einfügen ausführen

--------


> this.setDefaultCloseOperation(EXIT_ON_CLOSE);
> setSize(400,300);

schlecht, entweder

setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(400,300);

oder

this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setSize(400,300);
 
EDIT:: Ich bin der Threadersteller! War wohl nicht angemeldet!

Hast du das so gemeint?

Code:
public void createTable()
	{
		JTable table = new JTable(20,5);
		JScrollPane scroller = new JScrollPane(table);
		
		this.add(scroller);
		table.setVisible(true);
		scroller.setVisible(true);
	}

Wenn ja, dann ändert dies leider nichts 🙁 .

Mit deiner Anmerkung hast du natürlich recht, sollte immer einheitlich gemacht werden (auch wenn das hier nur eine kurzes Testbseispiel für micht ist). Trotzdem danke!
 
oh,

> table.setVisible(true);
> scroller.setVisible(true);

hatte ich gar nicht gesehen, das bringt nix,
du brauchst nur einmal setVisible(true); auf das JFRame (hast du ja schon), alles andere ist Käse

---------

ein Beispiel ist leicht, einfach die Tabelle einfügen, BEVOR du die GUI anzeigst,
sagte ich das nicht schon? 😉

Code:
public class Main
    extends JFrame
{
    public Main()
    {
        setTitle("Testwiese - Tabellen");
        createTable();

        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(400, 300);
        setVisible(true);
    }

    public void createTable()
    {
        JTable table = new JTable(20, 5);
        JScrollPane scroller = new JScrollPane(table);
        this.add(scroller);
        // sonst: validate();
    }


    public static void main(String[] args)
    {
        Main app = new Main();
    }
}
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben