Я использую следующий код, чтобы успешно иметь эффект наведения подчеркнутого текста, когда пользователь наводит курсор на JButton.Это работает как задумано.
При нажатии JButton просто удаляет текущую JPanel с экрана и добавляет к ней новую.Это также работает.
Проблема в том, что при фактическом щелчке эффект наведения подчеркнутого текста остается постоянно на JButton и не исчезает при перемещении мыши.
Я пытался реализовать mouseClicked()
, чтобы убрать подчеркнутый эффект при нажатии кнопки, но это не имеет никакого эффекта.Я мог бы воспользоваться советами экспертов о том, как сохранить подчеркивающий эффект на месте, удаляя его при добавлении нового JPanel через прослушиватель действий.
Фрагмент:
class MyAcctListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
totalGUI.removeAll();
totalGUI.add(headerPanel, BorderLayout.NORTH);
totalGUI.add(myAcctPanel, BorderLayout.CENTER);
repaint();
revalidate();
}
}
@SuppressWarnings("unchecked")
class HeaderMouseListener extends MouseAdapter
{
Font original;
@Override
public void mouseEntered(MouseEvent evt) {
original = evt.getComponent().getFont();
Map attributes = original. getAttributes();
attributes.put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON);
evt.getComponent().setFont(original.deriveFont(attributes));
}
@Override
public void mouseExited(MouseEvent evt){
evt.getComponent().setFont(original);
}
@Override
public void mouseClicked(MouseEvent evt) {
evt.getComponent().setFont(original);
}
}
private void createComponents() {
MouseListener headerMouseListener = new HeaderMouseListener();
acctButton = new JButton("My Account");
acctButton.setFont(buttonFont);
acctButton.setForeground(Color.BLUE);
acctButton.setBorderPainted(false);
acctButton.setContentAreaFilled(false);
acctButton.addMouseListener(headerMouseListener);
ActionListener myacctListener = new MyAcctListener();
acctButton.addActionListener(myacctListener);
}