Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
SwingJColorChooser's Icon will nicht getauscht werden.
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?
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() );
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.
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...
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 !
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() );
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.