Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使JButton显示一个只包含少量项的JButton列表_Java_Swing_Jbutton - Fatal编程技术网

Java 如何使JButton显示一个只包含少量项的JButton列表

Java 如何使JButton显示一个只包含少量项的JButton列表,java,swing,jbutton,Java,Swing,Jbutton,嘿,伙计们,我的问题是当我把鼠标放在JFrame中的一个JButton上时,我希望它在左边显示一个JButton列表 我真的不知道该怎么做,我觉得我被阻止了,我的项目无法取得任何进展 如果您能帮助我并提前表示感谢,我将不胜感激。能否在JPanel中创建按钮列表,将其添加到JFrame中,然后调用myPanel.setVisiblefalse。单击按钮后调用myPanel.setVisibletrue 为了确保myPanel的位置正确,您需要使用 或者您想要更复杂的行为吗?基本的选择是使用a和a。

嘿,伙计们,我的问题是当我把鼠标放在JFrame中的一个JButton上时,我希望它在左边显示一个JButton列表

我真的不知道该怎么做,我觉得我被阻止了,我的项目无法取得任何进展


如果您能帮助我并提前表示感谢,我将不胜感激。

能否在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");
        }

    }

}