首页 > 解决方案 > 为 Java Swing MVC 运行驱动程序不显示视图

问题描述

我对 MVC 不是很了解,所以如果这是一个基本问题,请原谅我。

我目前正在做一个学校项目,我似乎无法让程序正常运行。我已经尝试编译这些 java 文件而没有出现错误。但是,当我尝试运行 MenuDriver.java 文件时,GUI 窗口/视图没有弹出,程序刚刚结束。

菜单控制器.java

import java.awt.event.*;
import javax.swing.event.*;

public class MenuController implements ActionListener {
    private StartMenu start;

    public MenuController(StartMenu start) {
        this.start = start;
        start.setListeners (this);
    }

    public void actionPerformed (ActionEvent e) {
        if(e.getActionCommand().equals("Play")) {
            start.setVisible(false);
    }
}

菜单驱动程序.java

public class MenuDriver
{
    public static void main (String[] args)
    {
        StartMenu start = new StartMenu();
        MenuController controller = new MenuController (start);
    }
}

开始菜单.java

import javax.swing.JLabel;
import javax.swing.JButton;

public class StartMenu extends JFrame {

    private JPanel contentPane;
    private JButton btnPlay = new JButton("");
    private JLabel label = new JLabel("");

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    StartMenu frame = new StartMenu();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public StartMenu() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 650, 450);
        contentPane = new JPanel();
        contentPane.setBackground(Color.WHITE);
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        Image img = new ImageIcon(this.getClass().getResource("/smthn1.png")).getImage();
        label.setIcon(new ImageIcon(img));
        label.setBounds(84, 58, 457, 183);
        contentPane.add(label);

        Image img2 = new ImageIcon(this.getClass().getResource("/smthn2.png")).getImage();
        btnPlay.setIcon(new ImageIcon(img2));
        btnPlay.setBounds(222, 251, 166, 64);
        contentPane.add(btnPlay);

        btnPlay.setActionCommand("Play");
    }

    public void setListeners (ActionListener a) {
        btnPlay.addActionListener (a);
    }
}

我正在失去理智,任何帮助将不胜感激。谢谢!

标签: javaswinguser-interfacemodel-view-controller

解决方案


当我尝试运行 MenuDriver.java 文件时,GUI 窗口/视图没有弹出,程序刚刚结束。

你永远不会让框架可见,所以程序就结束了。

您需要在构造函数的末尾使框架可见:

btnPlay.setActionCommand("Play");
setVisible( true );

此外,学习使用布局管理器来定位组件。使用带有 setBounds(...) 的 null 布局并不是 Swing 设计的使用方式。


推荐阅读