Mise en œuvre d'un simple effet hover sur un Jlabel
Je suis déconner avec quelques idées pour un projet et j'aimerais créer une interface graphique à l'aide de Java swing qui ne ressemblent pas c'est à partir de windows 95. L'une des idées que j'ai été coups de pied autour de a été à l'utilisation JLabels que des boutons au lieu de la norme JButton. Cela me permettrait de personnaliser passez la souris, faites glisser, et des effets de mouvements, comme j'aime.
De recherche dans le MouseAdapter class
devrait me permettre de faire tout ce que j'entends, je suis malheureusement un peu de mal à mettre en œuvre le hover effet que je voulais que le JLabel
ne semble pas de mise à jour. J'ai essayé de mettre à jour le Cadre directement en appelant frame.update(getGraphics());
mais cela ne semble pas pour travailler comme je le pense.
Puis-je obtenir quelques conseils sur la façon de mettre à jour les étiquettes correctement.
Note: Ceci est juste un exemple avec pas d'efforts pour organiser le code efficacement
public class Window extends JFrame {
/**
*
*/
private static final long serialVersionUID = 5259700796854880162L;
private JTextField textField;
private JLabel lblNewLabel;
static Window frame;
int i = 0;
public Window() {
JPanel panel = new JPanel();
getContentPane().add(panel, BorderLayout.CENTER);
panel.setLayout(null);
lblNewLabel = new JLabel("New label");
lblNewLabel.setBackground(Color.LIGHT_GRAY);
lblNewLabel.setBounds(137, 38, 114, 70);
panel.add(lblNewLabel);
lblNewLabel.addMouseListener(new LabelAdapter());
textField = new JTextField();
textField.setBounds(122, 119, 86, 20);
panel.add(textField);
textField.setColumns(10);
}
private class LabelAdapter extends MouseAdapter {
@Override
public void mouseClicked(MouseEvent e) {
textField.setText(String.valueOf(i));
i++;
}
@Override
public void mouseEntered(MouseEvent e) {
lblNewLabel.setBackground(Color.CYAN);
}
@Override
public void mouseExited(MouseEvent e) {
lblNewLabel.setBackground(Color.LIGHT_GRAY);
}
}
/**
* @param args
*/
public static void main(String[] args) {
frame = new Window();
frame.setSize(900, 700);
frame.setVisible(true);
}
}
- JLabel est transparent par défaut. Pensez à désactiver l'un des boutons de contenu et ornithologue à la place...
- Reportez-vous Lien suivant qui vous aide [lien] stackoverflow.com/questions/11678722/...
- En utilisant des étiquettes des composants à la place des boutons pour des raisons de fanciness est une mauvaise pratique dans le gui de développement. Il suffit de penser aux gens qui préfèrent un clavier de navigation. Tous vos besoins peuvent être obtenus avec
JButton
ici.
Vous devez vous connecter pour publier un commentaire.
Window
est de réserver le nom deawt.Window
, de modifier ce nom, par exempleMyWindow
JPanel
a mis en œuvreFlowLayout
, vous ne pouvez pas utiliserNullLayout
utilisation intégrée LayoutManager, puis de l'utiliserJFrame.pack()
avantJFrame.setVisible
pour déterminer la taille appropriée sur l'écranJLabel
est transparent, la modifier en utilisantJLabel.setOpaque(true);
actualisation de
Backgroung Color
deMouse over/hover
n'est pas possible sansJLabel.repaint()
en tant que dernière ligne de code dans le bétonmouse_event
,repaint()
manquant dansJLabel API
Sur le dessus de mKorbel de réponse...
Je ne sais pas pourquoi vous allez donc beaucoup d'efforts, quand vous pouvez réellement faire un bouton de ressembler à un label.
Vous devriez également envisager d'essayer de Réglage de la regarder et se sentir ou peut-être même La modification de l'aspect et la convivialité
setBackground(null)
? Je suis d'accord, le modèle est sans doute une meilleure solution, mais la meilleure solution serait d'utiliser une INTERFACE utilisateur personnalisée délégué 😉Vous pouvez atteindre cet objectif à l'aide de MouseListener.
Voici l'exemple de progrma. Un coup d'oeil.