java 为什么窗口是空的?[关闭]

pgvzfuti  于 2022-12-21  发布在  Java
关注(0)|答案(1)|浏览(136)

这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
2天前关闭。
Improve this question
为什么窗口为空(按下按钮后无图像、按钮和蓝色背景)?
Main类中,我写道:

package com.company;

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

public class Main extends JFrame {

    public Main() {
        setTitle("Меню");
        setSize(640, 480);
        setResizable(false);
        JMenu menu = new JMenu();
        add(menu);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setVisible(true);
    }

    public static void main(String[] args) {
        new Main();
    }
}

Menu类中:

package com.company;

import java.awt.*;
import javax.swing.JPanel;
import javax.swing.ImageIcon;
import javax.swing.BoxLayout;
import javax.swing.Box;
import java.awt.event.ActionEvent;
import javax.swing.*;

public class Menu extends JPanel {
    public boolean started = false;

    public Menu() {
        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
        add(Box.createVerticalStrut(280));
        JButton button = new JButton("START");
        button.setAlignmentX(CENTER_ALIGNMENT);
        button.addActionListener(new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                start();
            }
        });
        add(button);
        add(Box.createVerticalGlue());
    }

    public void start() {
        removeAll();
        started = true;
        repaint();
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        if (!started)
            g.drawImage(new ImageIcon(Menu.class.getResource("C:\\Users\\powha\\Documents\\CTT\\ЗАНЯТИЯ\\Конкурсы\\Проекты\\NYRain\\src\\com\\company\\images\\background.png")).getImage(), 0, 0, 640, 480, this);
        else
            setBackground(Color.BLUE);
    }
}

它显示没有错误。
但是按下按钮后没有图像,按钮和蓝色背景。
为什么?
我添加了g.drawImagesetBackground(Color.BLUE)、按钮、button.addActionListener等库。
链路也正常。

fkaflof6

fkaflof61#

在问题What is wrong with the button?中,您试图将java.awt.Menu对象添加到JFrame,但这是不可能的(您只能添加从java.awt.Component扩展到JFrame的对象,并且java.awt.Menu不能扩展java.awt.Component)。
在这个问题中,现在添加一个空的JMenu,这是可能的,但不会添加任何真实的内容。
您可能想添加一个com.company.Menu对象。
为此,必须对Main类执行两项操作:

  • 删除import java.awt.Menu;
  • JMenu menu = new JMenu();行替换为Menu menu = new Menu();

更改后的www.example.comMain.java版本如下所示:

package com.company;

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

public class Main extends JFrame {

    public Main() {
        setTitle("Меню");
        setSize(640, 480);
        setResizable(false);
        Menu menu = new Menu();
        add(menu);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setVisible(true);
    }

    public static void main(String[] args) {
        new Main();
    }
}

相关问题