如何
使它在用户将光标悬停在 JLabel 上时显示菜单栏?我对鼠标事件等有点困惑。所以这是代码:
public class MenuPage extends JFrame implements ActionListener
{
private JLabel fShirts, tShirts, sweater, jeans, shoes, hats, bags;
private JButton btnCart, btnExit;
private JPanel leftPane, rightPane;
private Container cont;
public MenuPage()
{
super ("Menu");
cont = getContentPane();
cont.setLayout (new BorderLayout());
fShirts = new JLabel ("Formal Shirts", SwingConstants.CENTER);
tShirts = new JLabel ("T - Shirts", SwingConstants.CENTER);
sweater = new JLabel ("Sweater", SwingConstants.CENTER);
jeans = new JLabel ("Jeans", SwingConstants.CENTER);
shoes = new JLabel ("Shoes", SwingConstants.CENTER);
hats = new JLabel ("Hats", SwingConstants.CENTER);
bags = new JLabel ("Bags", SwingConstants.CENTER);
btnCart = new JButton ("Cart");
btnExit = new JButton ("Exit");
leftPane = new JPanel();
leftPane.setLayout (new GridLayout (9,1));
leftPane.setBorder (new TitledBorder ("Menus"));
cont.add (leftPane, BorderLayout.WEST);
leftPane.add (fShirts);
leftPane.add (tShirts);
leftPane.add (sweater);
leftPane.add (jeans);
leftPane.add (shoes);
leftPane.add (hats);
leftPane.add (bags);
leftPane.add (btnCart);
leftPane.add (btnExit);
leftPane.setOpaque (true);
btnCart.addActionListener(this);
btnExit.addActionListener(this);
pack();
setLocationRelativeTo(null);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
validate();
}
public void actionPerformed(ActionEvent menu)
{
{
if (menu.getSource() == btnCart)
{
dispose();
}
else if (menu.getSource() == btnExit)
{
dispose();
new WelcomePage();
}
}
}
public static void main(String args[])
{
MenuPage wp = new MenuPage();
}
}
如何使标签在用户将光标悬停在每个标签上时显示菜单栏?
只需实现一个MouseListener
(或MouseAdapter
,这很方便):
fShirts.addMouseListener(new MouseAdapter() {
@Override
public void mouseExited(MouseEvent e) {
System.out.println("hide menu");
}
@Override
public void mouseEntered(MouseEvent e) {
System.out.println("show menu");
}
});
顺便说一句,你的代码结构会像这样干净得多(除非你真的需要对标签的引用,我对此表示怀疑):
public class MenuPage extends JFrame implements ActionListener {
private JButton btnCart, btnExit;
private JPanel leftPane, rightPane;
private Container cont;
private static final List<String> LABELS_TEXT = Arrays.asList("Formal Shirts","T - Shirts", //
"Sweater","Jeans","Hats","Bags");
public MenuPage() {
super("Menu");
cont = getContentPane();
cont.setLayout(new BorderLayout());
leftPane = new JPanel();
leftPane.setLayout(new GridLayout(9,1));
leftPane.setBorder(new TitledBorder("Menus"));
List<JPopupMenu> popMenus = buildPopMenus();
for (int i=0 ; i<LABELS_TEXT.size() ; i++) {
final int j = i;
JLabel label = new JLabel(LABELS_TEXT.get(i),SwingConstants.CENTER);
label.addMouseListener(new MouseAdapter() {
@Override
public void mouseExited(MouseEvent e) {
popMenus.get(j).setVisible(false);
}
@Override
public void mouseEntered(MouseEvent e) {
Point loc = label.getLocationOnScreen();
loc.translate(label.getWidth(),label.getHeight());
popMenus.get(j).setLocation(loc);
popMenus.get(j).setVisible(true);
}
});
leftPane.add(label);
}
btnCart = new JButton("Cart");
btnExit = new JButton("Exit");
cont.add(leftPane,BorderLayout.WEST);
leftPane.setOpaque(true);
btnCart.addActionListener(this);
btnExit.addActionListener(this);
pack();
setLocationRelativeTo(null);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
validate();
}
private List<JPopupMenu> buildPopMenus() {
return LABELS_TEXT.stream().map(text -> {
JPopupMenu popMenu = new JPopupMenu();
popMenu.add(new JMenuItem(text));
return popMenu;
})
.collect(Collectors.toList());
}
public void actionPerformed(ActionEvent menu) {
if (menu.getSource() == btnCart) {
dispose();
}
else if (menu.getSource() == btnExit) {
dispose();
// new WelcomePage();
}
}
public static void main(String args[]) {
MenuPage wp = new MenuPage();
}
}