JTable nicht im gewünschten LookAndFeel

Hallo,

vor kurzem hatte ich meine JTable direkt in meinem GUI-Code initialisiert.
Jetzt ist die Table in einer eigenen Klasse, die von JTable erbt.
Und seitdem ist sie nicht mehr in meinem ausgewählten Look&Feel, sondern im Standard-Look&Feel von Java. Die restliche GUI sieht aber aus wie gewünscht (also werden die Look&Feels durcheinandergeworfen).

So war es früher (so, wie ich es haben will):

Und jetzt (so will ich es nicht haben):

Gibt es da allgemeine Probleme, wodurch sowas entstehen kann?
Ansonsten werde ich Code posten müssen.

Gruß,
pcworld

du musst erst das LnF festlegen und dann die GUI Sachen machen sonst musst du SwingUtilities.updateComponentTreeUI(…) aufrufen

Ich habe das Problem auch schon mal mit einem überschriebenen TableHeader gehabt. Das XP-Design wird dann nicht mehr dargestellt.

Funktioniert beides nicht.

Einen TableHeader habe ich nicht überschrieben, aber eben die JTable. Vielleicht liegt’s dadran.

Schau’s mir gleich mal unter Ubuntu an, ob da der gleiche Bug auch auftritt.

Unter Linux das gleiche Problem… - kann ich irgendetwas dagegen machen (meine überschriebene JTable würde ich nur ungern wieder in meinen anderen GUI-Code stecken :-))?

Gruß,
pcworld

Code währe ganz hilfreich :wink:

Es muss irgendwie an mir liegen, hab das grade noch mal ganz einfach mit einer erweiterten JTable probiert, und da geht es… (s. http://nopaste.byte-welt.de/view.php?id=569)

Ich werde in nächster Zeit mal Code posten.

Gruß,
pcworld

Hab mal ein kleines Codebeispiel zusammengeschnipselt:

import javax.swing.*;
import javax.swing.table.DefaultTableModel;

public class ExtendedTableProb {

	JTable table = new JTable(new DefaultTableModel(new String[] { "A", "B" },
			5));

	public static void main(String[] args) {
		new ExtendedTableProb().los();
	}

	private void los() {
		try {
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		} catch (Exception ex) {
			ex.printStackTrace();
		}

		JFrame frame = new JFrame();
		frame.setSize(500, 500);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		JPanel panel = new JPanel();
		panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
		panel.add(new JScrollPane(table));
		panel.add(new JButton("Es geht doch mit dem Standard-Look&Feel..."));
		frame.add(BorderLayout.CENTER, panel);

		frame.setVisible(true);
	}
}```

**Ausgabe:**
[img]http://img1.abload.de/img/screenshot-05.12.2002c5.png[/img]


Hat jemand eine Ahnung, warum das so ist? Das Look&Feel stimmt ja nur bei der JTable nicht, beim Button schon. Am LayoutManager liegt es nicht. Werde gleich noch ausprobieren, ob es an der JScrollPane liegt.

Gruß,
pcworld


**Edit:** An der JScrollPane liegt es auch nicht.

Du must das LAF setzen, BEVOR du die Tabelle machst.
So gehts:

import javax.swing.*;
import javax.swing.table.DefaultTableModel;

public class ExtendedTableProblem {
	JTable table;

	public static void main(String[] args) {
		new ExtendedTableProblem().los();
	}

	private void los() {
		try {
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		table = new JTable(new DefaultTableModel(new String[] { "A", "B" }, 5));
		JFrame frame = new JFrame();
		frame.setSize(500, 500);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JPanel panel = new JPanel();
		panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
		panel.add(new JScrollPane(table));
		panel.add(new JButton("Es geht doch mit dem Standard-Look&Feel..."));
		frame.add(BorderLayout.CENTER, panel);

		frame.setVisible(true);
	}
}```

Danke, jetzt geht es.

Gruß,
pcworld