繁体   English   中英

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

[英]Java Swing JButton must create 4 new objects and add to JPanel

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

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

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);
    }
}

我将我的Fightmenu设置为使用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

我添加了revalidate和repaint,它起作用了!

private void fightmenupress() {
                fightmenu.add(attack1);
                fightmenu.add(attack2);
                fightmenu.add(attack3);
                fightmenu.add(attack4);
                fightmenu.revalidate();
                fightmenu.repaint();
            } 
            } );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM