Nimbus eigener Painter funzt nicht

Status
Nicht offen für weitere Antworten.

asroger

Mitglied
Moin zusammen !

Ich setzte in meiner main Nimbus als L&F und erstelle für einen
TextField[Focused].borderPainter einen eigenen Painter der dann über den UIManager gesetzt wird:
Code:
Painter bknTextFocusPainter = new Painter() {
	public void paint(Graphics2D g, Object object, int w, int h) {
				g.setStroke(new BasicStroke(2f));
				g.setColor(Color.RED);
				g.fillOval(1, 1, w - 3, h - 3);
				g.setColor(Color.WHITE);
				g.drawOval(1, 1, w - 3, h - 3);
		}
	};

UIManager.put("TextField[Focused].borderPainter", bknTextFocusPainter);	

for (LookAndFeelInfo laf : UIManager.getInstalledLookAndFeels()) {
   if ("Nimbus".equals(laf.getName())) {
       UIManager.setLookAndFeel(laf.getClassName());
   }
}

Nimbus wird gesetzt aber der eigene Painter hat keinerlei Effekt.
Habe ich noch was vergessen ??

Besten Dank für eure Hilfe
 
S

SlaterB

Gast
was ist denn ein Painter? kann eine derartige Klasse nicht finden

vielleicht den Befehl
UIManager.put("TextField[Focused].borderPainter", bknTextFocusPainter);
NACH UIManager.setLookAndFeel()?
 

asroger

Mitglied
Hallo !
@Slater Habe die Reihenfolge schon geändert --> keine Wirkung
@Marco13
com.sun.java.swing.Painter ist laut Beschreibung für Nimbus genau zu diesem Zwecke vorhanden. Über den UIManager setzt man die Konstante für die Nimbus dann den selbstgebastelten Painter aufruft.

Man kann das ganze auch für ein einzelnes Textfeld setzen:
Java:
			Painter bknTextFocusPainter = new Painter() {
				public void paint(Graphics2D g, Object object, int w, int h) {
					g.setStroke(new BasicStroke(2f));
					g.setColor(Color.RED);
					g.fillOval(1, 1, w - 3, h - 3);
					g.setColor(Color.WHITE);
					g.drawOval(1, 1, w - 3, h - 3);
				}
			};

			// Nur für einzelne Componenten
			 UIDefaults bknTextDefaults = new UIDefaults();
			 bknTextDefaults.put("TextField[Focused].borderPainter",
			 bknTextFocusPainter);
			 meinTextField.putClientProperty("Nimbus.Overrides",
			 bknTextDefaults);
			 meinTextField.putClientProperty("Nimbus.Overrides.InheritDefaults",
			 false);

Dann funktioniert es bei mir.

Will aber für alle Textfelder !!
 

Noctarius

Top Contributor
Generell sollte man aber keine Klassen aus com.sun nutzen, da diese auf anderen JVMs (z.B. der von IBM) nicht existieren.
 

asroger

Mitglied
@Notarius Na das hilft mir ja weiter
Ich denke Nimbus ist offiziell ins JDK aufgenommen, dann sollte man es auch nutzen dürfen
 

Noctarius

Top Contributor
FAQ - Sun Packages

Weiß ich, dass dir das nicht weiterhilft, aber es hilft dir eventuell auch nicht, wenn dein Programm später auf anderen VM nicht läuft.

Es war halt nur ein gut gemeinter Rat, aber wenn du meinst, dass du es machen musst :)
 

asroger

Mitglied
Moin !
Hier kommt ein Beispiel in dem die globale Beeinflussung des FocusPainter nicht funktioniert, fürs einzelne Textfeld klappt's.
Java:
package de.kbs.nimbus.test;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics2D;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIDefaults;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.UIManager.LookAndFeelInfo;
import javax.swing.border.EmptyBorder;

import com.sun.java.swing.Painter;

public class NimbusPainterTest extends JFrame {

	private JPanel contentPane;
	private JTextField textField;
	private JTextField textField_1;
	private Painter bknTextFocusPainter;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					NimbusPainterTest frame = new NimbusPainterTest();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}

		});
	}

	private void setLook() throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException {
		bknTextFocusPainter = new Painter() {
			public void paint(Graphics2D g, Object object, int w, int h) {
				g.setStroke(new BasicStroke(2f));
				g.setColor(Color.RED);
				g.fillOval(1, 1, w - 3, h - 3);
				g.setColor(Color.WHITE);
				g.drawOval(1, 1, w - 3, h - 3);
			}
		};

		// Für alle Textfelder
		UIManager.put("TextField[Focused].borderPainter", bknTextFocusPainter);

		for (LookAndFeelInfo laf : UIManager.getInstalledLookAndFeels()) {
			if ("Nimbus".equals(laf.getName())) {
				UIManager.setLookAndFeel(laf.getClassName());
			}
		}

	}

	/**
	 * Create the frame.
	 * 
	 * @throws UnsupportedLookAndFeelException
	 * @throws IllegalAccessException
	 * @throws InstantiationException
	 * @throws ClassNotFoundException
	 */
	public NimbusPainterTest() throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException {
		setLook();
		initialize();
	}

	private void initialize() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		this.contentPane = new JPanel();
		this.contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(this.contentPane);
		this.contentPane.setLayout(null);
		this.contentPane.add(getTextField());
		this.contentPane.add(getTextField_1());
	}

	private JTextField getTextField() {
		if (textField == null) {
			textField = new JTextField();
			textField.setBounds(171, 60, 86, 20);
			textField.setColumns(10);
		}
		return textField;
	}

	private JTextField getTextField_1() {
		if (textField_1 == null) {
			textField_1 = new JTextField();
			textField_1.setBounds(171, 137, 86, 20);
			textField_1.setColumns(10);

			//Nur für dieses Textfeld
			UIDefaults bknTextDefaults = new UIDefaults();
			bknTextDefaults.put("TextField[Focused].borderPainter", bknTextFocusPainter);
			textField_1.putClientProperty("Nimbus.Overrides", bknTextDefaults);
			textField_1.putClientProperty("Nimbus.Overrides.InheritDefaults", false);

		}
		return textField_1;
	}
}
 
Zuletzt bearbeitet von einem Moderator:

Marco13

Top Contributor
Offenbar hilft es, die Zeile
UIManager.put("TextField[Focused].borderPainter", bknTextFocusPainter);
rauszunehmen, und stattdessen NACH dem Setzen des L&F die Zeile
UIManager.getLookAndFeelDefaults().put("TextField[Focused].borderPainter", bknTextFocusPainter);
einzufügen - aber nochmal: Painter sollte man nicht verwenden! Schau' dir irgendein Nimbus-Tutorial an, wo steht, wie es richtig geht!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R LookAndFeel Wie kann man die Textfarbe der Nimbus ProgressBar nach Füllstand ändern? AWT, Swing, JavaFX & SWT 2
M JTabbedPane verändern mit Nimbus Look and Feel AWT, Swing, JavaFX & SWT 1
V LookAndFeel JSpinner Hintergrund Farbe mit Nimbus LaF AWT, Swing, JavaFX & SWT 0
H Nimbus ProgressBar Colors AWT, Swing, JavaFX & SWT 9
H Nimbus L&F TitledBorder AWT, Swing, JavaFX & SWT 2
V Nimbus Look and Feel register Region problem AWT, Swing, JavaFX & SWT 5
V Nimbus Look And Feel Button textForeground AWT, Swing, JavaFX & SWT 8
M jTabbedPain und Nimbus AWT, Swing, JavaFX & SWT 4
T Nimbus JButton: Zeilenumbruch korrigieren? AWT, Swing, JavaFX & SWT 9
N Nimbus Look & Feel AWT, Swing, JavaFX & SWT 4
hdi LookAndFeel Nimbus BUG mit JTabbedPane?! AWT, Swing, JavaFX & SWT 5
Y LookAndFeel Nimbus einschalten geht nicht AWT, Swing, JavaFX & SWT 31
V Swing Nimbus Look And Feel verschiedene Buttons AWT, Swing, JavaFX & SWT 8
A LookAndFeel Rollover Effekt bei JTabbedPane deaktivieren (Nimbus) AWT, Swing, JavaFX & SWT 8
B LookAndFeel Cell Renderer für JTable bei Nimbus Look and Feel AWT, Swing, JavaFX & SWT 2
T Nimbus Überschrift AWT, Swing, JavaFX & SWT 10
P LookAndFeel nimbus JLabel undurchsichtig opaque funktioniert nicht AWT, Swing, JavaFX & SWT 4
R LookAndFeel Nimbus ändert Programmausführung AWT, Swing, JavaFX & SWT 8
Y LookAndFeel JTabbedPane: Tab-Farbe mit Nimbus setzen AWT, Swing, JavaFX & SWT 3
N Swing Nimbus arbeitet nicht korrekt korrekt bei setEnabled() für JMenuItem AWT, Swing, JavaFX & SWT 2
C LookAndFeel Nimbus TabbedPane Backgroundcolor AWT, Swing, JavaFX & SWT 12
S Metal-Buttons so aussehen lassen wie Nimbus Buttons? AWT, Swing, JavaFX & SWT 3
Fu3L Keine Transparenten JTextComponents möglich mit Nimbus L&F? AWT, Swing, JavaFX & SWT 5
S Swing JTable in Nimbus AWT, Swing, JavaFX & SWT 4
O nimbus Abbrechen ok vertauscht AWT, Swing, JavaFX & SWT 2
E Look & Feel - Nimbus AWT, Swing, JavaFX & SWT 12
data89 Nimbus Look and Feel als gepackte JAR-Datei AWT, Swing, JavaFX & SWT 3
T Swing: TaskPane mit Nimbus LnF? AWT, Swing, JavaFX & SWT 4
M Problem Nimbus Look&Feel AWT, Swing, JavaFX & SWT 2
oliver1974 Nimbus Look & Feel und die Ausgaben nach Standardaus. AWT, Swing, JavaFX & SWT 4
Maxim6394 JavaFX Scene Builder - Crash bei eigener Komponente AWT, Swing, JavaFX & SWT 2
H Eigener Dialog mit Rückgabe -> Warten auf Button AWT, Swing, JavaFX & SWT 3
K eigener button in swing AWT, Swing, JavaFX & SWT 3
T Event Handling JLabel als eigener Button AWT, Swing, JavaFX & SWT 7
A Drag and Drop eigener Objekte AWT, Swing, JavaFX & SWT 7
B Erstellen eigener Combobox ("CellFactory") AWT, Swing, JavaFX & SWT 4
S Eigener Syntax Highlighter - Problem AWT, Swing, JavaFX & SWT 5
Oliver530 ActionListener von eigener ButtonKlasse AWT, Swing, JavaFX & SWT 16
N 2D-Grafik RTF in eigener JComponent AWT, Swing, JavaFX & SWT 2
K 3D-Grafik Canvas ist ein eigener Frame?! AWT, Swing, JavaFX & SWT 13
frankred Swing Eigener ListCellRenderer D'n'D "MOVE" - Mauszeiger flackert AWT, Swing, JavaFX & SWT 14
N jComboBox und eigener Datentyp AWT, Swing, JavaFX & SWT 8
Q Eigener Colorchooser AWT, Swing, JavaFX & SWT 2
V LayoutManager Eigener LayoutManager funktioniert nicht. AWT, Swing, JavaFX & SWT 5
C Swing eigener InputDialog AWT, Swing, JavaFX & SWT 6
L Swing Falscher Wert nach eigener Sortierung (JTable) AWT, Swing, JavaFX & SWT 2
R JTable - eigener Editor - Mouse events AWT, Swing, JavaFX & SWT 2
S Mit eigener Klasse auf GUI-Elemente zugreifen AWT, Swing, JavaFX & SWT 3
J Swing JTable, eigener TableCellRenderer Keine Anzeige in den Zellen AWT, Swing, JavaFX & SWT 8
N Eigener Grafik Editor mit fehlerhafter Anzeige AWT, Swing, JavaFX & SWT 4
O Eigener Button AWT, Swing, JavaFX & SWT 8
data89 Eigener Button variiert in der Größe - Hilfee! AWT, Swing, JavaFX & SWT 5
O AWT Zeichne mit eigener Farbe AWT, Swing, JavaFX & SWT 3
A Aufrufen eigener Klasse AWT, Swing, JavaFX & SWT 8
J eigener Layoutmanager? AWT, Swing, JavaFX & SWT 6
M Eigenes ActionEvent / Eigener Listener AWT, Swing, JavaFX & SWT 2
G SWT DatePicker funzt nicht in eigener Anwendung AWT, Swing, JavaFX & SWT 5
J Problem mit eigener Titelleiste und MouseMotionListener AWT, Swing, JavaFX & SWT 2
F Eigener Observer? AWT, Swing, JavaFX & SWT 4
H eigener Editor und JList als PopMenu AWT, Swing, JavaFX & SWT 6
M Brauche Hilfe zum Einbinden von eigener Schrfitart AWT, Swing, JavaFX & SWT 3
m@nu Problem mit eigener TableCellEditor-Impelemtierung AWT, Swing, JavaFX & SWT 5
clemson Edtor mit anzeigen eigener Tags AWT, Swing, JavaFX & SWT 8
V SWT eigener Renderer? + wo gibts die Sourcen für SWT AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben