Java 如何使JButton显示一个只包含少量项的JButton列表
嘿,伙计们,我的问题是当我把鼠标放在JFrame中的一个JButton上时,我希望它在左边显示一个JButton列表 我真的不知道该怎么做,我觉得我被阻止了,我的项目无法取得任何进展Java 如何使JButton显示一个只包含少量项的JButton列表,java,swing,jbutton,Java,Swing,Jbutton,嘿,伙计们,我的问题是当我把鼠标放在JFrame中的一个JButton上时,我希望它在左边显示一个JButton列表 我真的不知道该怎么做,我觉得我被阻止了,我的项目无法取得任何进展 如果您能帮助我并提前表示感谢,我将不胜感激。能否在JPanel中创建按钮列表,将其添加到JFrame中,然后调用myPanel.setVisiblefalse。单击按钮后调用myPanel.setVisibletrue 为了确保myPanel的位置正确,您需要使用 或者您想要更复杂的行为吗?基本的选择是使用a和a。
如果您能帮助我并提前表示感谢,我将不胜感激。能否在JPanel中创建按钮列表,将其添加到JFrame中,然后调用myPanel.setVisiblefalse。单击按钮后调用myPanel.setVisibletrue 为了确保myPanel的位置正确,您需要使用
或者您想要更复杂的行为吗?基本的选择是使用a和a。MouseListener将用于确定鼠标光标何时进入/存在给定组件,CardLayout将用于显示每个菜单元素的相应子组件 我不得不说,JButton将是菜单项的最后一个选择,在大多数情况下,JLabel将是首选,甚至可能使用JMenu,它可以有子菜单,可以自动显示,可能是更好的选择,甚至是JComboBox
你上传的图片在哪里?你能更详细地解释一下你想做什么以及你在哪里卡住了吗?我想在我把鼠标放在第一个按钮上时,例如,它会列出与它相关的项目。你现在明白我的意思了吗?不,不太明白。您是否希望设置JButton的工具提示?你真的需要花一点时间,把你的问题的细节告诉我们。恐怕你掩饰得太多了。但是,让我们再次远离这个痛苦和令人沮丧的游戏,我们试图从你那里获取信息,而你却给了我们一些不完整的小片段。如果你想让别人给你一个完整的答案,请尝试问一个完整而彻底的问题。我不会尝试太多,我会告诉你它是否有效@Richard
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class ShowStuff {
public static void main(String[] args) {
new ShowStuff();
}
public ShowStuff() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
MenuPane menu = new MenuPane();
menu.addMenu("Fruit", new FruitPane());
menu.addMenu("Meat", new MeatPane());
menu.addMenu("Dairy", new DairyPane());
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(menu);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class MenuPane extends JPanel {
private JPanel subMenu;
private JPanel menu;
private CardLayout cardLayout;
private MouseListener mouseHandler;
public MenuPane() {
setLayout(new BorderLayout());
cardLayout = new CardLayout();
subMenu = new JPanel(cardLayout);
menu = new JPanel(new GridBagLayout());
add(subMenu);
add(menu, BorderLayout.WEST);
subMenu.add(new JPanel(), "BLANK");
mouseHandler = new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
if (e.getSource() instanceof JButton) {
JButton btn = (JButton) e.getSource();
cardLayout.show(subMenu, btn.getText());
}
}
@Override
public void mouseExited(MouseEvent e) {
cardLayout.show(subMenu, "BLANK");
}
};
}
public void addMenu(String name, JPanel subMenuPane) {
JButton button = new JButton(name);
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
menu.add(button, gbc);
subMenu.add(subMenuPane, name);
button.addMouseListener(mouseHandler);
}
}
public abstract class ButtonPane extends JPanel {
private int gridy = 0;
public ButtonPane() {
setLayout(new GridBagLayout());
}
protected void addButton(String name) {
JButton btn = new JButton(name);
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = gridy++;
gbc.fill = GridBagConstraints.HORIZONTAL;
add(btn, gbc);
}
}
public class FruitPane extends ButtonPane {
public FruitPane() {
addButton("Banana");
addButton("Grapes");
addButton("Apples");
addButton("Tomatoes");
}
}
public class MeatPane extends ButtonPane {
public MeatPane() {
addButton("Lamb");
addButton("Beef");
addButton("Pork");
addButton("Mince");
}
}
public class DairyPane extends ButtonPane {
public DairyPane() {
addButton("Milk");
addButton("Cream");
addButton("Cheese");
addButton("Yoghurt");
}
}
}