当前位置: 首页 > 知识库问答 >
问题:

在面板上添加ActionListener。如何映射到主框架?

屈浩波
2023-03-14

我有2面板(2类,从JPanel扩展),1帧(1类,从JFrame扩展)

我的第一个小组——Welcome小组:

package caro;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class WelcomePanel extends JPanel {

    public WelcomePanel() {

        ImageIcon logoImage = new ImageIcon("/home/khanhpq/logo.png");
        JButton playButton = new JButton("Play");
        JButton exitButton = new JButton("Exit");

        JLabel imageLabel = new JLabel(logoImage);

        add(imageLabel);
        add(playButton);
        add(exitButton);

        playButton.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {



            }
        });

        exitButton.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                int option = JOptionPane.showConfirmDialog(null, "Are you sure ?", "Warning", JOptionPane.YES_NO_OPTION);               
                if(option == JOptionPane.YES_OPTION) {
                    System.exit(0);
                }
            }
        });

    }

}

我的第二个面板-董事会面板:

package caro;

import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JPanel;

public class BoardPanel extends JPanel {    

    public BoardPanel() {

        JPanel boardPanel = new JPanel();

        Board board = new Board();

        CellButton cellButton[] = new CellButton[144];

        GridLayout gridLayout = new GridLayout(12, 12);     
        boardPanel.setLayout(gridLayout);       

        for (int i = 0; i < 144; i++) {         
                cellButton[i] = new CellButton();               
                boardPanel.add(cellButton[i]);              
        }

    }

}

我的主框架——主机

package caro;

import javax.swing.JFrame;

public class MainFrame extends JFrame {

    public MainFrame() {
        add(new WelcomePanel());
        setSize(360, 380);
        setVisible(true);

    }

    public static void main(String[] args) {
        MainFrame startFrame = new MainFrame();
    }

}

我的问题:帮我写代码,在面板的按钮上添加ActionListener(材料示例)。当我按下播放按钮(WelcomePanel)时,WelcomePanel被隐藏,BoardPanel被显示。当我退出BoardPanel(按下close按钮或单击x按钮)时,WelcomePanel就会显示出来。我的朋友建议使用消息和句柄,但我不知道。请帮帮我。谢谢

共有1个答案

慕容文昌
2023-03-14

最好声明依赖项(按钮、面板等组件)就像田野一样。通过这种方式,它们对作为其控制器的第三类是可见的。在下一个例子中,我让大型机控制自己,只是一个例子。阅读演示模式以获得更好的实践。

欢迎anel.java

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class WelcomePanel extends JPanel {

    /* Declare your dependecies as fields,
     * so you can hold a reference.
     */
    ImageIcon logoImage;
    JButton playButton;
    JButton exitButton;
    JLabel imageLabel;

    public WelcomePanel() {

        logoImage = new ImageIcon("/home/khanhpq/logo.png");
        playButton = new JButton("Play");
        exitButton = new JButton("Exit");
        imageLabel = new JLabel(logoImage);

        add(imageLabel);
        add(playButton);
        add(exitButton);

    }

}

董事会。JAVA

import javax.swing.JButton;
import javax.swing.JPanel;

public class BoardPanel extends JPanel {

    /* Declare your dependecies as fields,
     * so you can hold a reference.
     */
    JButton closeButton;

    public BoardPanel() {
        closeButton = new JButton();
        add(closeButton);

    }
}

主机。JAVA

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class MainFrame extends JFrame implements ActionListener {

    /* Declare your dependecies as fields,
     * so you can hold a reference.
     */
    WelcomePanel welcomePanel;
    BoardPanel boardPanel;

    public MainFrame() {
        welcomePanel = new WelcomePanel();
        boardPanel = new BoardPanel();

        add(welcomePanel);
        add(boardPanel);

        boardPanel.setVisible(false);

        boardPanel.closeButton.addActionListener(this);
        welcomePanel.playButton.addActionListener(this);

        setSize(360, 380);
    }

    /**
     * This class is the controller.
     */
    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource().equals(boardPanel.closeButton)) {
            welcomePanel.setVisible(false);
            boardPanel.setVisible(true);
        } else if (e.getSource().equals(welcomePanel.playButton)) {
            welcomePanel.setVisible(true);
            boardPanel.setVisible(false);
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                MainFrame startFrame = new MainFrame();
                startFrame.setVisible(true);

            }
        });
    }
}
 类似资料:
  • 问题内容: 如何将动作侦听器添加到这些按钮,以便可以从主要方法调用actionperformed它们,因此单击它们时可以在程序中调用它们? 问题答案: 两种方式: 1.在你的类中实现,然后使用; 稍后,你必须定义一个方法。但是,对多个按钮执行此操作可能会造成混淆,因为该方法将必须检查每个事件()的来源以查看其来自哪个按钮。 2.使用匿名内部类: 稍后,你必须定义。当你有多个按钮时,这样做效果更好,

  • 我试图将ActionListener添加到一个标签中,每当用户键入错误的密码或登录时,该标签就会弹出。这是我的登录控制器 我如何能够解决这个问题?我已经尝试了很多次(setOnAction, addMouseListener),但都不起作用:(。 如果你不介意的话,我还想问一下public void initialize函数。这是干什么用的?当我创建类时,它会自动弹出。 提前感谢

  • 问题内容: 如何将actionListener添加到使用netbeans放置的现有jCalendar的jDayChooser组件中? 我只想在单击日期按钮时才触发事件。当jCalendar中的propertyChange甚至侦听jMonthChooser和jYearChooser时 使用Toedter的jCalendar的PS 问题答案: 或者,你可以侦听特定的,。 附录: 如何使它适用于 ? 同

  • 我从消防队拿到了我的文件。目前我在列表中有以下内容: 然后,在下面的方法中,我转换这个列表以放入一个具有所需格式的地图。

  • 我正在构建一个Java程序。该程序的核心在JFrame中可视化,其中包含一个JMenuBar和各种JMenuItem和JMenu。关键是我在所有框架中添加了一个centralPanel,但是如果我在centralPanel中添加了一些内容,那么只有在调整主框架的大小、缩小或放大它时,它才会显示出来!代码如下: 这是构造函数: 在这里,我添加了中央面板,在这里,在ActionListener中,我试