JTabbedPane => Tabfarbe und Rand

fanste

Erfahrenes Mitglied
Hi,

Ich habe zwei Fragen zur JTabbedPane in Java.

  1. Wie bekomme ich eine andere Farbe bei den Tabs hin. Die Hintergrundfarbe kann man ja ohne Probleme ändern. Ist jedoch ein Tab ausgewählt, hat er wieder seine komische graue Farbe.
    Habe dazu zwar etwas gefunden, aber besonders hilfreich war mir das nicht.
  2. Wie bekomme ich den Rand der TabbedPane weg. Ich will einen klatten Übergang zum Hintergrund haben. Ohne den Rand.

Ich hoffe ihr könnt mir da behilflich sein. Danke schonmal für die kommenden Bemühungen.
 
Hallo fanste,

Swing bietet ausser den Settern, wie setBackground() oder setBorder() eine weitere Möglichkeit, GUI Komponenten zu modifizieren.
Dies geschieht über den UIManager mit Hilfe der UIDefaults. Hier ein Beispiel:

UIManager.put("TabbedPane.contentBorderInsets", new InsetsUIResource(0,0,0,0));

Damit wäre der graue hässliche Rand :) weg. Allerdings sieht das nicht so schön aus, besser wäre es du vergibst dem Rand die Farbe welche zum Hintergrund passt.

Hier findest du eine umfangreiche Auflistung der UIDefaults. Allein für die TabbedPane gibt es ca 20 UIDefaults.
http://www.rgagnon.com/javadetails/JavaUIDefaults.txt

Einfach die eine oder andere ausprobieren, kombinieren bis es passt.


Vg Erdal
 
Hi flashray,

Sorry, dass ich mich erst jetzt melde. Hatte übers Wochenende kein Internet zur Verfügung,

Den UIManager werde ich mir mal genauer anschauen. Danke mal dafür.

Dann noch eine Frage, die jetzt nicht damit zu tun hat, ich deswegen jetzt aber auch keinen extra Thread aufmachen will.
Kann man in Java keine Arrays mit String Keys erstellen? Ich bekomme immer den fehler "int required". Mache ich nur was falsch, oder geht das nicht?
 
Array mit String

So in etwa:
Java:
String Config[][] = new String[2][3];

//.....

Config["allg"]["aktiv"] = "ja"
//...
 
Schade. Muss ich es wohl anders lösen.

Zu meinem anderen Problem.
Der übernimmt mir den Rand nicht. So habe ich es angewendet.
Java:
JTabbedPane tabbedPane = new JTabbedPane();
//...

//alles ab hier steht in einer Funktion
tabbedPane.setOpaque(true);
tabbedPane.setBounds(5,5, frameWidth-15, frameHeight-88);
tabbedPane.setBackground(c2);
UIManager.put("tabbedPane.contentBorderInsets", new InsetsUIResource(0,0,0,0)); 
cp.add(tabbedPane);
   
//...

Was mach nun schon wieder falsch? Es kommt auch keine Fehlermeldung. Es tritt einfach nur keine Änderung in Kraft.
 
Zuletzt bearbeitet:
Du schreibst entweder UIManager.put() an den Anfang der main Methode oder rufst nach UIManager.put() mytabbedpane.updateUI() auf.

Für was brauchst du dieses exotische Array mit den String Indizes?

Vg Erdal
 
Für den Configparser. Will eine Konfiguratuionsdatei auslesen. Da die Bezeichner in der Configdatei aber nicht an einer festen Stelle gebunden sind, kann ich keine nummerischen Keys verwenden, sondern muss auf Strings zurückgreifen können.

Bsp:
Code:
pathConfHosts = Pfad zur Hostsconfig
pathIrgendwas = Pfad zu irgendwas
Code:
pathIrgendwas = Pfad zu irgendwas
pathConfHosts = Pfad zur Hostsconfig

Das wären jetzt zwei unterschiedliche Configs mit gleichen Inhalt. Wenn ich jetzt aber den Index 0 verwende, bekäme ich einmal "pathConfHosts" und beim anderen mal "pathIrgendwas". Darum sind nummerische Indizes nicht für mich geeignet.


EDIT: Die Änderungen beim TabbedPane hat es danach immer noch nicht übernommen :(
 
Zuletzt bearbeitet:
Hallo Fanste,

ich glaub dein PC ist kaputt :) .

schau mal hier:
Java:
import javax.swing.*;
import javax.swing.plaf.InsetsUIResource;

public class TabExample extends JFrame {

	private JTabbedPane tab = new JTabbedPane();

	private JPanel tabpanel1 = new JPanel();

	private JPanel tabpanel2 = new JPanel();

	public TabExample() {
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setLocationByPlatform(true);
		this.setSize(500, 300);

		tabpanel1.add(new JButton("Button"));
		tabpanel2.add(new JLabel("Label"));

		tab.addTab("tab1", tabpanel1);
		tab.addTab("tab2", tabpanel2);

		UIManager.put("TabbedPane.contentBorderInsets", new InsetsUIResource(0,
				0, 0, 0));
		tab.updateUI();

		this.add(tab);

		this.setVisible(true);
	}

	public static void main(String[] args) {
		// UIManager.put("TabbedPane.contentBorderInsets", new InsetsUIResource(0,0,0,0));
		new TabExample();
	}
}


Vg Erdal
 
Zurück