JButton setPressedIcon funktioniert nicht

ForenDaddy

Grünschnabel
ich habe ein paar jbuttons mit einem icon versehen.
der button selber ist unsichtbar per:
Code:
zellenBreite = table.getColumn( "Info" ).getWidth();
image = new Bilder( new Auftrag() ).loadImage( FCP_System.ICON_AUSRUFEZEICHEN_RED );
double bildBreite = (double)image.getWidth() * ( (double)zellenHoehe / (double)image.getHeight() );
button = new JButton( new ImageIcon( image.getScaledInstance( (int) (bildBreite * 0.8), (int) (zellenHoehe * 0.8), image.SCALE_SMOOTH ) ) );
button.setContentAreaFilled( false );
button.setBorderPainted( false );
aber wenn ich auf den button drücke, wird, solange ich gedrückt halte, alles was hinter dem icon liegt sichtbar.
also icon ist weg, button ist wieder sichtbar mit dem jeweiligen text.

ich habe also versucht mit:
Code:
button.setPressedIcon( neuesIcon );
das zu unterbinden.
klappt leider überhaupt nicht. setselectedicon hat auch nichts gebracht.

ich verwende zur zeit kein l&F.

woran kann das liegen?
 
Zuletzt bearbeitet:
Warum willst du bitte einen Button verstecken? Graphische Elemente sind dazu da, um gesehen zu werden, sonst solltest du die Funktion lieber in die Kommandozeile oder eine API verstecken.

ich verwende zur zeit kein l&F.
Du verwendest (mit Swing) IMMER ein L&F, das kannst du gar nicht verhindern. In deinem Fall wird es wohl das Standard-L&F sein.
 
Zuletzt bearbeitet:
ich habe einen button, das icon. das imageicon tritt also an die stelle des original java buttons.
doch beim klicken, taucht der java button plötzlich wieder auf und das icon verschwindet.
damit verändert er seine gestalt beim klicken.
das sieht gelinde gesagt, merkwürdig aus.
 
leider nein, die seite kenne ich schon.
überall wo ich gesucht habe, wird das setPressedIcon() propagiert.
es funktioniert aber nicht.
gibt es noch andere möglichkeiten einem button ein icon zuzuordnen während er gedrückt wird?
 
Bist du dir sicher, dass das Icon problemlos und fehlerfrei geladen wird?
Funktioniert es, wenn du für alle Zustände das gleiche Button-Objekt benutzt?
 
es ist immer das selbe button objekt, mit namen button und ich verwende auch das selbe icon.
ist am praktischsten, weil die optik dann natürlich 100% identisch ist.
nur egal ob ich setPressedIcon festlege oder nicht, es ändert einfach gar nichts dran.

ich habe oben mal den ganzen code eingestellt, mit dem ich das icon setze.
das setPressedIcon muss man sich einfach nur eine zeile drunter dazu denken, auch mit einem image.getscaledinstacen(....).
 
Zuletzt bearbeitet:
Ich kann dein Problem nicht beobachten.
Kannst du vllt. noch etwas mehr Code posten? Am besten gleich in JAVA-Tags (siehe meine Signatur)
 
in Zeile 36 habe ich versucht das setPressedIcon() zu setzen.

kompletter ButtonRenderer:
siehe auch JTable soll mit Buttons befüllt werden, aber nicht in jede Zelle einer Spalte
Java:
class ButtonRenderer implements TableCellRenderer {
        JButton button = new JButton();
        BufferedImage image;
        int zellenBreite = 0;
        int zellenHoehe = 0;
 
 
        public Component getTableCellRendererComponent(JTable table,
                                                       Object value,
                                                       boolean isSelected,
                                                       boolean hasFocus,
                                                       int row, int column) {
 
            zellenHoehe = table.getRowHeight( column );
            if ( column == 1 ) {
                zellenBreite = table.getColumn( "Statusmeldung" ).getWidth();
                image = new Bilder( new Auftrag() ).loadImage( FCP_System.ICON_INFO );
                double bildBreite = (double)image.getWidth() * ( (double)zellenHoehe / (double)image.getHeight() );
                button = new JButton( new ImageIcon( image.getScaledInstance( (int) (bildBreite * 0.8), (int) (zellenHoehe * 0.8), image.SCALE_SMOOTH ) ) );
                button.setContentAreaFilled( false );
                button.setBorderPainted( false );
            } else if( column == 2 ) {
                zellenBreite = table.getColumn( "Abrechnung" ).getWidth();
                image = new Bilder( new Auftrag() ).loadImage( FCP_System.ICON_EURO );
                double bildBreite = (double)image.getWidth() * ( (double)zellenHoehe / (double)image.getHeight() );
                button = new JButton( new ImageIcon( image.getScaledInstance( (int) (bildBreite * 0.8), (int) (zellenHoehe * 0.8), image.SCALE_SMOOTH ) ) );
                button.setContentAreaFilled( false );
                button.setBorderPainted( false );
table.getModel().getValueAt( row, column ) );
            }  else if ( column == 7 ) {
                zellenBreite = table.getColumn( "Info" ).getWidth();
                image = new Bilder( new Auftrag() ).loadImage( FCP_System.ICON_AUSRUFEZEICHEN_RED );
                double bildBreite = (double)image.getWidth() * ( (double)zellenHoehe / (double)image.getHeight() );
                button = new JButton( new ImageIcon( image.getScaledInstance( (int) (bildBreite * 0.8), (int) (zellenHoehe * 0.8), image.SCALE_SMOOTH ) ) );
button.setPressedIcon( new ImageIcon( image.getScaledInstance( (int) (bildBreite * 0.8), (int) (zellenHoehe * 0.8), image.SCALE_SMOOTH ) ) );
                button.setContentAreaFilled( false );
                button.setBorderPainted( false );
            } else {
                button.setText(value.toString());
            }
            return button;
        }
    }
 
Zurück