voglio aggiungere un hovering-effetto alla mia Swing.JButton personalizzata simile all'icona sul mio browser Chrome:swing JButton: che mostra bordo e lo sfondo solo quando è librato
Prima hover >>
Dopo hover >>
sono in grado di impostare il pulsante nella "prima" stato quando è stato creato, ma non sono in grado di creare il "bordo + sfondo in rilievo" quando è al passaggio del mouse. Quando tento di aggiungere nuovamente il bordo al pulsante, ho ottenuto un effetto in movimento, poiché dopo aver ridipinto un nuovo bordo è stato inserito.
Questo è il mio codice corrente:
public class MyButton extends JButton implements MouseListener {
public MyButton(String iconPath, String toolTip) {
super(new ImageIcon(TipButton.class.getResource(iconPath)));
addMouseListener(this);
setBorder(null);
setBorderPainted(false);
setFocusPainted(false);
setOpaque(false);
setContentAreaFilled(false);
setToolTipText(toolTip);
}
public MyButton(String iconPath, String name, String toolTip) {
this(observers, iconPath, toolTip);
setText(name);
}
@Override
public void mouseClicked(MouseEvent e) {}
@Override
public void mousePressed(MouseEvent e) {}
@Override
public void mouseReleased(MouseEvent e) {}
@Override
public void mouseEntered(MouseEvent e) {
if (e.getSource() != this) return;
setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
}
@Override
public void mouseExited(MouseEvent e) {
if (e.getSource() != this) return;
setBorder(null);
}
}
Suppongo che la logica principale dovrebbe essere nei metodi mouseEntered/mouseExited ma non so come ottenere l'effetto desiderato. Qualche idea?
Ma perché c'è la necessità di ereditare 'JButton', guardando il codice, mi sembra, che non ce n'è. L'intera operazione può essere eseguita anche su una semplice istanza di 'JButton', come già suggerito da' mKorbel' (ecco perché ha risposto a questa risposta). Spero che considererete la composizione sull'ereditarietà, nell'attuazione effettiva del codice. –
Rimosso ereditarietà e sostituito MouseListener con ChangeListener – Randomize