Swing JColorChooser's Icon will nicht getauscht werden.

Andiamo

Mitglied
Hallo liebes Forum,

meine Versuche das Icon (die JavaTasse oben links im Rahmen) des JColorChooser zu ändern sind kläglich gescheitert.
So einfach wie bei den anderen Fenstern und Dialogen mit
this.setIconImage()
geht leider es nicht.
Oder hab ich meinen Fuss auf den berüchtigten Schlauch zum stehen gebracht?

danke für eure Hilfe
ciao
A.
 
Java:
jColorChooser1.setIcon(new ImageIcon(this.getClass().getResource ("Pfad/zum/Icon")).getImage());

Sent from my GT-I9505 using Tapatalk
 
genau das habe ich ja auch gemacht, aber es funktioniert nicht.
und ich bekomme von Eclipse:

"The method setIcon(Image) is undefined for the type jColorChooser"

:-(

ciao
A.
 
Vielen Dank für eure Antworten.

Wie schon Anfangs geschrieben hab, wurde meinerseits einiges ausprobiert, so auch unter anderem die aufgeführten Lösungsansätze.
Ohne Erfolg.
Irgendwie fürt der JColorChooser.showDialog ein eigenwilliges Leben...

Ursprünglich hab ich mit nur die Farbe holen wollen:

Java:
Color c = JColorChooser.showDialog( null, "Change Color", category.getColor() );

Nur die javaTasse bekomme ich nicht weg
:-(


danke für eure Antworten
ciao
A.
 
Entschuldigung für den vorschnellen Post, ohne vollständigen code und erklärung, hab zu schnell gedrückt.

Hier die Richige Fassung:

Anhand dieser Information:
Parameters:
component: the parent Component for the dialog
title: the String containing the dialog's title
initialColor: the initial Color set when the color-chooser is shown
Returns:
the selected color or null if the user opted out......

Ich habe es so verstanden, das ich dem Dialogfenster ein Fenster zuweisen kann welches drumherum gezeichnet wird.

zu meinem Code:
Per mauseclick soll die Farbe ausgewählt werden, das klappt auch alles. JColorChooser wird angezeigt die gewählte farbe übergeben. JFrame bzw. JDialog sollen das "DrumrumFenster" sein:

Java:
 public void mouseClicked(MouseEvent e) {
		
if( e.getSource() == colorLabel ){
	
JDialog choserwindow= new JDialog();
choserwindow.setIconImage(MyImageButtler.getImage("icon"));
			
JFrame chooserFrame =new JFrame(); 
chooserFrame.setIconImage(MyImageButtler.getImage("icon"));



Color c = JColorChooser.showDialog( chooserFrame, "Change Color", category.getColor() );
if( c == null )
	return;
if( !c.equals(category.getColor() ) )
	
colorLabel.setBackground( c );
category.setColor(c);
}//if - colorLabel
}//mouseClicked
egal was ich Dem Choosr mitgebe (chooserFrame, choserwindow etc ), wird das Icon nicht gesetzt

ciao
A.

ps: @ Klaus, ich weis das die Mitglieder dieses Forums einen sehr guten Job machen (bin seit Jahren ein stiller Mitleser) und das auch immer wieder Leute erscheinen, die am liebsten fertigen code haben wollen. So einer bin ich nicht, entschuldige bitte wenn ich falsch rübergekommen bin, ich wollte nicht unhöflich sein.
🙂
 
Zuletzt bearbeitet:
Am einfachsten bekommst du das Icon geändert indem du dem Chooser sagst er soll das Icon von seinem Parent nehmen. Das ist die Component, die als erster Parameter in der showDialog() Methode entgegengenommen wird.

Wenn du bereits einen Frame hast, der ein eigenes Icon besitzt, reicht es eine Referenz darauf der showDialog() Methode mitzugeben.

So z.B.

Java:
Color farbe = JColorChooser.showDialog(meinJFrame, "Ein Tiel", Color.GREEN);

Wenn du keinen Parent für den Chooser hast, oder er ein ganz anderes Icon bekommen soll wirds es schwieriger. Aber nicht unmöglich...
 
Moin,

so, habe es gerade nochmal mit einem kleinen TestClient ausprobiert!
Versuch' es mal so, da hat es bei mit im Anwendungsfenster (JFrame) geklappt :
Java:
ImageIcon image = new ImageIcon( "camera35.png" );
this.setIconImage( image.getImage() ); // 'this' war hier der Konstruktor der Anwendung(sklasse)

Ich hatte die png-Datei hier im Hauptverzeichnis der Anwendung liegen!
Das ist IMHO immer ein bisschen frickelig mit den Pfaden - du musst Du mal rumprobieren !

Gruß
Klaus
 
Alles gut, alles gut, hat geklappt.

war mein Fehler, hab bei testen die falsche Klasse aufgerufen (die unveränderte) , konnte ja nicht gehen.
Also vielen Dank an alle, ich hab es mit dem parent gelöst, das hat das icon ja schon eingebaut.

Ich sag doch ich seh den Baum vor lauter Wald nicht.

Hier nochmal zum mitschreiben für andere User:
Java:
 Color c = JColorChooser.showDialog( this, "Change Color", category.getColor() );

danke noch einmal an alle
ciao
A.
 
Zuletzt bearbeitet:
Ich hatte etwas Zeit und habe eine Variante erstellt bei der man dem ColorChooser ein eigenes Icon übergeben kann. Beim Code hab ich mich sehr an dem original ColorChooser orientiert.

Java:
import java.awt.Color;
import java.awt.Image;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.io.Serializable;

import javax.swing.JColorChooser;
import javax.swing.JDialog;

public class JColorChooser2 extends JColorChooser
{
	private static final long serialVersionUID = 2625456305346543912L;
	
	
	private static class CTracker implements ActionListener, Serializable
	{
		private static final long serialVersionUID = -197689474611652861L;
		private JColorChooser chooser;
		private Color color;
		
		private CTracker(JColorChooser chooser)
		{
			this.chooser = chooser;
		}
		
		@Override
		public void actionPerformed(ActionEvent e)
		{
			color = chooser.getColor();
		}
		
		private Color getColor()
		{
			return color;
		}
	}
	
	public static Color showDialog(Image icon, String title, Color initialColor)
	{
		JColorChooser pane = new JColorChooser(initialColor != null ? initialColor : Color.WHITE);
		CTracker ok = new CTracker(pane);
		JDialog dialog = createDialog(null, title, true, pane, ok, null);
		dialog.setIconImage(icon);
		dialog.addComponentListener(new ComponentAdapter() {
			
			@Override
			public void componentHidden(ComponentEvent e)
			{
				Window w = (Window) e.getComponent();
				w.dispose();
			}
		});
		dialog.setVisible(true);
		
		return ok.getColor();
	}
}

Jetzt kann man einfach so etwas machen:
Java:
Color c = JColorChooser2.showDialog(einEigenesIcon, "Ein Titel", Color.GREEN);

Bei mir funktioniert es wunderbar. Trotzdem: Alles ohne Gewähr.
 

Zurück
Oben