Button verblassen lassen

Status
Nicht offen für weitere Antworten.

Dagobert

Bekanntes Mitglied
Einen wunder schönen guten Abend zusammen,
Ich habe gerade mal wieder ein kleines Problem.
Ich möchte gernen einen Button langsam verblassen/ausgraunen lassen, aber ich habe keine Ahnung wie ich das anstellen soll. Das einfache "disablen" kommt dehn schon nahe, nur möchte ich, das dies langsamer geschiht.
Wie kann ich das bewerkstelligen? ???:L

Die einzige möglichkeit die mir gerade einfält ist ein Haufen Images die nach und nach dunkler werden bis zum erwünschten Ergebniss. Aber das muss doch auch irgendwie anders gehen (einfacher).


mfg. Dagobert
 

Campino

Top Contributor
Du könntest "setBackground" und "setForeground" verwenden um die Buttonfarbe zu ändern, dazu jeweils ein repaint. Allerdings ist AWT/Swing glaube ich nicht für solche Effekte gedacht...
 

Marco13

Top Contributor
NICHTS ist für solche Effekte gedacht. Ist zwar blöd, die Frage "Wie geht das?" zu beantworten mit "Wofür brauchst du das?", aber ... manchmal werden shcon absurde Fragen gestellt :?
 

Illuvatar

Top Contributor
Marco13 hat gesagt.:
NICHTS ist für solche Effekte gedacht. Ist zwar blöd, die Frage "Wie geht das?" zu beantworten mit "Wofür brauchst du das?", aber ... manchmal werden shcon absurde Fragen gestellt :?

Und überhaupt... dieser ganze grafische Schnickschnack. Die Benutzeroberfläche hätte man einfach so wie damals in Win 3.0 belassen sollen, alles nur unnötige Zeitverschwendung...

(wer Ironie findet darfs sie behalten)
 

Wildcard

Top Contributor
Anders ist definitiv nicht immer besser (bei GUIs). Daher grundsätzlich das System Look and Feel nehmen, denn es ist genau das was der User haben wollte.
Wenn der User einen tollen Composition Fenster Manager mit 3D Effekten und Buttoneffekten hat, schön. Dann kümmert sich aber der Fenstermanager und nicht das Anwendungsprogramm.
 

Marco13

Top Contributor
@Illuvatar: Nicht, dass ich mit so was gerechenet hätte.... :wink:

Es kommt nunmal oft vor, dass Leute (Anfänger) irgendwelchen (und der Threadersteller möge mir dieses Wort verzeihen) Firlefanz implementieren wollen (Tooltip-Hintergundfarbe ändern, ActionListener an den Button einer Scrollbar hängen, und was man hier nicht alles liest).

Ganz objektiv: Wozu soll ein Button langsam ausgegraut werden? Um ihn "langsam zu disablen"? Ab welchem Grauwert soll der Button disabled sein? Wenn er schon zu 49% grau ist, kann man ihn dann noch anklicken?

Die verschwendete Rechenleistung sei jetzt mal außen vor gelassen - aber die Arbeitszeit, die manche investieren, um in ihr GUI so einen Hauch von Individualität reinzustümpern ist schon beängstigend.

Die Intention ist garnicht so schlimm. Genaugenommen fand ich die Frage sogar ganz interessant. Wenn mir irgendwann mal langweilig ist, schreibe ich vielleicht mal nur zum Spaß einen JButtonThatBecomesGraySlowly - ja, ein lutiger Effekt. Aber wenn jemand das zielgerichtet entwickeln will, um damit einen bestimmten Zweck zu erfüllen, dann wird er sich, wenn er in einem Forum fragt, wie das geht, die Gegenfrage gefallen lassen müssen, welchen Zweck das haben soll...
 

Dagobert

Bekanntes Mitglied
Habt ihr schonmal ein Hauptmenü in einem Spiel gesehen was nicht solche Spielerrein hat (abgesehn von CS).
Und jetzt stellt euch zum Beipsiel mal ein Spiel mit Sandart Windows Buttons da.
Wie wüdert ihr euch fühlen?
 

Illuvatar

Top Contributor
@Marco: Kenn ich ja auch zur Genüge :bae:

Aber trotzdem, so kleine Spielereien haben imo schon ihre Berechtigung und können auch gut aussehen... man stelle sich nur mal vor, Aerith wäre komplett mit Standard-Swing-Components gemacht ;)
 

Dagobert

Bekanntes Mitglied
Wenn wir schon vom Theman abschweifen...
gibt es ne Chance ein Buffered Image auf ein Button zu setzten, bei mir kommt es immer zur nullpoint

Code:
BufferedImage temp = ...
button.setIcon(new ImageIcon(temp));

mfg. Dagobert
 

Campino

Top Contributor
Dann überleg dir, warum das nullpointert. Irgendwas ist nicht da, was da sein sollte. Entweder button ist null oder temp. Lass dir beide mal mit System.out.println() ausgeben und guck, was null ist.

In Spielen kommt eine echte Game Engine zum Einsatz. Warum bloß? Ach, richtig, weil tolle Effekte wie der von dir beschriebene mit Standard- GUI- Packungen nicht gehen...
 

Marco13

Top Contributor
Hmja, man kann solche Effekte natürlich nachbauen, aber ... das Thema User Interface Design ist eine Wissenschaft für sich - da mal so einen Button Grau-animieren, nur weil's cool aussieht... naja. Ich hab' da mal was geschrieben (gehackt), das post ich ggf. morgen oder so mal...
 

lhein

Top Contributor
Jedem das seine.
Wer meint, dass er mit dem Standard L&F am besten fährt, der soll das in Gottes Namen tun. Aber dann ist nicht Swing die Wahl der Waffen sondern SWT/JFace.
Wer lieber GUI's nach Art von Aerith oder Picasa haben will, der braucht eben solche "Spielereien". Und für den ist das besagte Buch eben eine gute Wahl.
 

byte

Top Contributor
Ich nehme mal an, es geht um Swing? Dann kann man SwingX verwenden, um solche Effekte zu erzeugen. SwingX beherrscht Transparenz und es gibt noch eine API zum Erzeugen von Animationen.
 

Marco13

Top Contributor
Ach ja, da war ja noch was....


Ist gehackt, und ineffizient aufgrund des Versuches, einigermaßen das gleiche ENDergebnis zu erreichen wie bei "setEnabled(false)" aber .... was passieren sollte, wenn man so einen gefadeten Button dann zusätzlich noch disabled, ist mir eh nicht klar, darum ist das egal....

Code:
import javax.swing.*;

import java.awt.*;
import java.awt.image.*;

public class FadingButton extends JButton
{
    private BufferedImage image = null;
    private float fadeValue = 0;

    public FadingButton(Action a)
    {
        super(a);
    }
    public FadingButton(Icon icon)
    {
        super(icon);
    }
    public FadingButton(String text)
    {
        super(text);
    }
    public FadingButton(String text, Icon icon)
    {
        super(text, icon);
    }
    
    @Override
    public void paintComponent(Graphics gr)
    {
        Graphics2D g = (Graphics2D) gr;
        if (image == null || image.getWidth() != getWidth() ||
            image.getHeight() != getHeight())
        {
            image = new BufferedImage(getWidth(), getHeight(),
                                      BufferedImage.TYPE_INT_RGB);
        }
        Graphics2D ig = (Graphics2D) image.getGraphics();
        ig.setFont(g.getFont());
        ig.setStroke(g.getStroke());
        super.paintComponent(ig);
        //System.out.println("fadeValue "+fadeValue);
        for (int x = 0; x < image.getWidth(); x++)
        {
            for (int y = 0; y < image.getHeight(); y++)
            {
                image.setRGB(x, y, filter(image.getRGB(x, y)));
            }
        }
        g.drawImage(image, 0, 0, this);
    }

    private float hsb[] = new float[3];

    private int filter(int rgb)
    {
        float brightness = getBrightnessFor(rgb);
        int r = (rgb >> 16) & 0xFF;
        int g = (rgb >> 8) & 0xFF;
        int b = (rgb >> 0) & 0xFF;
        Color.RGBtoHSB(r, g, b, hsb);
        hsb[1] *= (1 - fadeValue);
        hsb[2] = (1-fadeValue) * hsb[2] + fadeValue * brightness;
        int result = 0xFF000000 | Color.HSBtoRGB(hsb[0], hsb[1], hsb[2]);
        return result;
    }

    private float getBrightnessFor(int rgbIn)
    {
        int rgb = getAsGray(rgbIn);        
        int r = (rgb >> 16) & 0xFF;
        int g = (rgb >> 8) & 0xFF;
        int b = (rgb >> 0) & 0xFF;
        Color.RGBtoHSB(r, g, b, hsb);
        return hsb[2];
    }
    
    private int getAsGray(int rgb)
    {
        int percent = 72;
        int r = (rgb >> 16) & 0xFF;
        int g = (rgb >> 8) & 0xFF;
        int b = (rgb >> 0) & 0xFF;
        int gray = (int)((0.30 * r + 0.59 * g + 0.11 * b) / 3);
        gray = (255 - ((255 - gray) * (100 - percent) / 100));
        if (gray < 0) gray = 0;
        if (gray > 255) gray = 255;
        return (rgb & 0xff000000) | (gray << 16) | (gray << 8) | (gray << 0);        
    }
    
    public void setFaded(final boolean faded)
    {
        Thread thread = new Thread(new Runnable()
        {
            public void run()
            {
                for (int i = 0; i < 100; i++)
                {
                    fadeValue = (float) i / 100;
                    if (!faded)
                    {
                        fadeValue = 1.0f - fadeValue;
                    }
                    repaint();
                    try
                    {
                        Thread.sleep(10);
                    }
                    catch (Exception e)
                    {}
                }
            }
        });
        thread.start();
    }
}
Code:
import javax.swing.*;

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.awt.color.ColorSpace;


public class FadingButtonTest
{
    public static void main(String args[])
    {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.getContentPane().setLayout(new GridLayout(1,0));
        
        final FadingButton fadingButton = new FadingButton(new ImageIcon("071207.jpg"));
        f.getContentPane().add(fadingButton);

        
        final JButton button = new JButton(new ImageIcon("071207.jpg"));
        f.getContentPane().add(button);
        
        final JToggleButton b = new JToggleButton("Toggle");
        b.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                fadingButton.setFaded(b.isSelected());
                button.setEnabled(!b.isSelected());
            }
        });
        f.getContentPane().add(b);
        
        //f.setSize(400,300);
        f.pack();
        f.setVisible(true);
    }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Thread mit Button anhalten und wieder neu starten lassen AWT, Swing, JavaFX & SWT 3
C Button ActionListener funktioniert nicht AWT, Swing, JavaFX & SWT 1
G Button auswerten und ausgeben ob richtig oder falsch AWT, Swing, JavaFX & SWT 1
D Button und Textfeld Darstellung AWT, Swing, JavaFX & SWT 3
H Button / Design Ideen AWT, Swing, JavaFX & SWT 2
Mojo7310 Ändern von Text in JLabel mit einem Button AWT, Swing, JavaFX & SWT 11
B JavaFX Sprachumschaltung mit Button auf der HMI AWT, Swing, JavaFX & SWT 6
T TableView Button onAction AWT, Swing, JavaFX & SWT 3
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
JavaBeginner22 Button Hilfe AWT, Swing, JavaFX & SWT 0
Jose05 JavaFX: eigene FXML-Datei für einen Button AWT, Swing, JavaFX & SWT 3
J Button-Keyboard Interaktion AWT, Swing, JavaFX & SWT 7
EinNickname9 Swing Button mittig positionieren AWT, Swing, JavaFX & SWT 4
L actionListener für Button AWT, Swing, JavaFX & SWT 97
melaniemueller Verschiebung eines Fensters über Button AWT, Swing, JavaFX & SWT 27
I JavaFX Hover-Effekt bei Button AWT, Swing, JavaFX & SWT 11
Zeppi Swing Button soll Spiel zurücksetzen AWT, Swing, JavaFX & SWT 5
G Button Strings Effektiver setzen AWT, Swing, JavaFX & SWT 3
CptK windowClosed() nur aufrufen, wenn Fenster nicht über Button geschlossen wird AWT, Swing, JavaFX & SWT 1
W Zweites/neues Fenster durch Button öffnen AWT, Swing, JavaFX & SWT 6
B Text mit Absatz + OK-Button, der Fenster wieder schließt AWT, Swing, JavaFX & SWT 7
T Button für GUI programmieren AWT, Swing, JavaFX & SWT 1
N Bilder auf Button einfügen und mehrmals ändern (ein Button, mehrere ActionListener) AWT, Swing, JavaFX & SWT 2
W JavaFX Button - optimale Breite berechnen AWT, Swing, JavaFX & SWT 1
L Swing Button Farbe ändern/wechseln AWT, Swing, JavaFX & SWT 2
P Button simpler random auf einem JPanel verteilen? AWT, Swing, JavaFX & SWT 3
S JavaFx Zufallsfarbe beim Button-Klick AWT, Swing, JavaFX & SWT 22
N Aufruf einer anderen Klasse durch Button ActionListener AWT, Swing, JavaFX & SWT 2
VPChief Swing Eclipse: Nach Exportieren, Button funktioniert nicht mehr AWT, Swing, JavaFX & SWT 26
Z Button bewegen und Plätze tauschen AWT, Swing, JavaFX & SWT 4
Z Swing Button anklicken und bewegen AWT, Swing, JavaFX & SWT 2
K JavaFX Button verbinden AWT, Swing, JavaFX & SWT 6
Z Mit einem Button einen anderen Button Triggern AWT, Swing, JavaFX & SWT 3
M JavaFX Button action abhängigkeit von Tab AWT, Swing, JavaFX & SWT 1
A Swing JTextField an Button übergeben für Popup-Fenster funktioniert nicht AWT, Swing, JavaFX & SWT 3
H Eigener Dialog mit Rückgabe -> Warten auf Button AWT, Swing, JavaFX & SWT 3
F JLabel mit ImageIcon per Button bewegen AWT, Swing, JavaFX & SWT 4
L Button Funktion zuweisen in WindowBuilder AWT, Swing, JavaFX & SWT 22
A Button mit Speicher-Funktion AWT, Swing, JavaFX & SWT 8
krgewb Swing Icon von Button AWT, Swing, JavaFX & SWT 12
J Schriftart über einen Button ändern AWT, Swing, JavaFX & SWT 1
Bluedaishi JavaFX Button Image aus Datenbank AWT, Swing, JavaFX & SWT 13
CptK Swing Button: ImageIcon unter den Text AWT, Swing, JavaFX & SWT 4
Ø Swing Button in anderer Klassen ausführen AWT, Swing, JavaFX & SWT 6
X Neues Fenster mit Button öffnen und bearbeiten AWT, Swing, JavaFX & SWT 4
cool_brivk24 Swing Button Farbe ändern AWT, Swing, JavaFX & SWT 2
K JavaFX TextInputDialog Button Text ändern AWT, Swing, JavaFX & SWT 1
L ActionListener zu Button in Panel hinzufügen AWT, Swing, JavaFX & SWT 10
J Aus welchen Grund wird der Button nicht angezeigt im GridPane? AWT, Swing, JavaFX & SWT 1
S GUI Schließen Button auf der linken Seite AWT, Swing, JavaFX & SWT 2
J Swing Bild in Button AWT, Swing, JavaFX & SWT 11
das_leon AWT Button Design ändern AWT, Swing, JavaFX & SWT 5
J Thread per Button starten AWT, Swing, JavaFX & SWT 10
E Button verschwindet nachdem ein Rechteck gezeichnet wurde AWT, Swing, JavaFX & SWT 5
G JComboBox: Arrow-Button permanent anzeigen AWT, Swing, JavaFX & SWT 4
emma_louisa JavaFX MenuBar Zweitfenster; bei Button "Abbrechen" nur das Zweitfenster schließen AWT, Swing, JavaFX & SWT 2
I JavaFX: "globaler Button" AWT, Swing, JavaFX & SWT 0
M JavaFX ActionEvent Button AWT, Swing, JavaFX & SWT 6
S JavaFx - Button ActionEvent Probleme AWT, Swing, JavaFX & SWT 3
J Button lässt sich nicht auf dem JPanel verschieben AWT, Swing, JavaFX & SWT 5
Q AWT TicTacToe Image auf Button hinzufügen AWT, Swing, JavaFX & SWT 5
H JavaFX - Button und Text - Falsche Darstellung AWT, Swing, JavaFX & SWT 3
S Swing Problem mit Button und ActionListener AWT, Swing, JavaFX & SWT 5
it_is_all Swing Button, ComboBox,... -- Unterschied: NetBeans Design <-> Ausführung AWT, Swing, JavaFX & SWT 2
B FXML GUI - Button ausblenden AWT, Swing, JavaFX & SWT 1
it_is_all JPanel verschwindet nach Button-Klick AWT, Swing, JavaFX & SWT 2
L JavaFX button über andere Klasse ändern AWT, Swing, JavaFX & SWT 7
L Suchergebnisse variabel mit Button anzeigen lassen AWT, Swing, JavaFX & SWT 3
K über Button andere Java Klasse aufrufen AWT, Swing, JavaFX & SWT 15
J Event Handling Button "enablen" wenn Eingaben in Textfeldern korrekt sind AWT, Swing, JavaFX & SWT 1
Ksanatos Swing Bild (.jpg) einlesen und per Button wechseln AWT, Swing, JavaFX & SWT 9
U JavaFX Wechsel der Scene nach betätigen eines Button AWT, Swing, JavaFX & SWT 2
V JavaFX Button Controller Fehler, trotz Erfolg in einem anderem Code? AWT, Swing, JavaFX & SWT 7
E Fehler bei Button AWT, Swing, JavaFX & SWT 1
A Swing Tabelle wird bei Betätigung des Button nicht befüllt AWT, Swing, JavaFX & SWT 17
C Applet Zeichnen über Button-Click AWT, Swing, JavaFX & SWT 13
GreenTeaYT Button funktioniert nicht für Ein-und Auszahlungen? AWT, Swing, JavaFX & SWT 8
MaxG. Swing Farbe von Button beim drücken ändern AWT, Swing, JavaFX & SWT 4
S per Button Variableninhalt aus anderer Klasse holen AWT, Swing, JavaFX & SWT 3
A Swing GUI - Button soll Frame verändern AWT, Swing, JavaFX & SWT 4
T Frage zu GUI - Button soll Objekt erfassen AWT, Swing, JavaFX & SWT 2
MaxG. Swing Bild Button AWT, Swing, JavaFX & SWT 7
P Jframe Bild einfügen, Hintergrund Farbe ändern, und Button schrift Größe ändern AWT, Swing, JavaFX & SWT 2
A Nach klick auf Button neuen Inhalt im gleichen Fenster AWT, Swing, JavaFX & SWT 3
N Swing Abfrage durch JTextField nach Button betätigung AWT, Swing, JavaFX & SWT 3
H JavaFX via .fxml einen abgeleiteten Button erstellen... AWT, Swing, JavaFX & SWT 4
T JavaFX Button als Runnable AWT, Swing, JavaFX & SWT 4
OlafHD JPasswordField mit Button eingeben AWT, Swing, JavaFX & SWT 4
B JavaFX Wie programmiere ich hier einen "Weiter" Button? AWT, Swing, JavaFX & SWT 11
S AWT Daten über TextField und Button in array speichern AWT, Swing, JavaFX & SWT 5
D JavaFX Button Links- und Rechtsklick? AWT, Swing, JavaFX & SWT 1
Thallius Button von JDatePicker customizen? AWT, Swing, JavaFX & SWT 0
K eigener button in swing AWT, Swing, JavaFX & SWT 3
C Durch klicken von Button neues Fenster oeffnen AWT, Swing, JavaFX & SWT 18
R Button Aktion AWT, Swing, JavaFX & SWT 3
X Javafx button per enter auslösen AWT, Swing, JavaFX & SWT 5
Z Swing Button Click AWT, Swing, JavaFX & SWT 1
J Problem mit Button darstellung AWT, Swing, JavaFX & SWT 23
K JavaFX Unresolved class button bar AWT, Swing, JavaFX & SWT 8
T Event Handling JLabel als eigener Button AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen

Neue Themen


Oben