Java Swing JButton 必须创建 4 个新对象并添加到 JPanel

标签 java swing

好的,所以当我按下 JButton menuselect1 时,我希望它创建 4 个新对象,attack1 2 3 和 4,然后将它们添加到 JPanel 战斗菜单中。 这是我到目前为止的代码,它是一个迷你口袋妖怪游戏。

首先,我创建所有对象,然后设置大小并将它们添加到不同的 JPanel

public class MainFrame extends JFrame {

    JPanel mainwindow = new JPanel();
    JPanel bottom = new JPanel();
    JPanel combat = new JPanel();
    JPanel selectionmenu = new JPanel();
    JPanel fightmenu = new JPanel();
    JButton menuselect1 = new JButton("Fight");
    JButton menuselect2 = new JButton("Minimons");
    JButton menuselect3 = new JButton("Bag");
    JButton menuselect4 = new JButton("Run");
    JButton attack1 = new JButton("Tackle");
    JButton attack2 = new JButton("Lightningbolt");
    JButton attack3 = new JButton("Thunder-Shock");
    JButton attack4 = new JButton("Hyper-Beam");

    JButton poke1 = new JButton("Ekans");
    JButton poke2 = new JButton("Pikachu");
    public static void main(String[] args){
        new MainFrame();
    }
    public MainFrame(){
        super("MiniMon");
        setSize(640,640);
        setResizable(false);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        add(mainwindow);

        // SIZES
        combat.setPreferredSize(new Dimension(640,452));
        bottom.setPreferredSize(new Dimension(640,160));
        selectionmenu.setPreferredSize(new Dimension(320,160));
        fightmenu.setPreferredSize(new Dimension(320,160));

        mainwindow.setLayout(new BorderLayout());
        mainwindow.add(combat, BorderLayout.NORTH);
        mainwindow.add(bottom, BorderLayout.SOUTH);

        combat.setLayout(new BorderLayout());
        combat.add(poke1, BorderLayout.NORTH);
        combat.add(poke2, BorderLayout.SOUTH);

        bottom.setLayout(new BorderLayout());
        bottom.add(selectionmenu, BorderLayout.EAST);
        bottom.add(fightmenu, BorderLayout.WEST);

        selectionmenu.setLayout(new GridLayout(2,2));
        selectionmenu.add(menuselect1);
        selectionmenu.add(menuselect2); 
        selectionmenu.add(menuselect3);
        selectionmenu.add(menuselect4);

        fightmenu.setLayout(new GridLayout(2,2));

        setVisible(true);
    }
}

我将战斗菜单设置为使用 2x2 网格布局,因此每当按下 JButton menuselect1 时我只需要添加 4 个对象。我不太确定该怎么做。我知道我应该添加一个事件监听器,但是当我尝试时,它什么也没做。 我尝试这样做:

fightmenu.setLayout(new GridLayout(2,2));
        menuselect1.addActionListener(new ActionListener() { 
              public void actionPerformed(ActionEvent e) { 
                fightmenupress();
              }
            private void fightmenupress() {
                fightmenu.add(attack1);
                fightmenu.add(attack2);
                fightmenu.add(attack3);
                fightmenu.add(attack4);
            } 
            } );

但它什么也没做。

最佳答案

当您向可见 GUI 添加(或删除)组件时,基本代码是:

panel.add(...);
panel.revalidate(); // to invoke the layout manager
panel.repaint(); // to repaint all the components on the panel

关于Java Swing JButton 必须创建 4 个新对象并添加到 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27333561/

相关文章:

java - 编写工厂方法最有效的方法是什么?

java - 使用 Jackson 将 json 映射到 java 对象时汇总所有错误

java - 本地化不适用于 Android 应用程序中的字符串数组

java - 如何使用 spark Java API 从 HDFS 读取二进制文件流?

java - 让球在 Canvas 上弹起

java - 使用 UUID.randomUUID() 并多次调用方法?

java - Observer的update方法会在事件派发线程上执行吗

java - 如何在给定字符串数组的情况下获取特定的 JTree 节点

java - 从数据库 (SQL) 中检索图像 (Long Blob) 并将其显示到 JLabel

java - JScrollPane 不显示在滚动上