Java 当我将程序设置为全屏时,为什么JPanel不能正确呈现?

Java 当我将程序设置为全屏时,为什么JPanel不能正确呈现?,java,swing,jbutton,Java,Swing,Jbutton,我制作了一个将JFrame设置为全屏的JButton: add(fullscreen); fullscreen.setSize(100, settings.getHeight()); fullscreen.setLocation(settings.getX() + (settings.getWidth() / 2) - 50, light.getY() + 35); fullscreen.addActionListener(new ActionListener

我制作了一个将JFrame设置为全屏的JButton:

    add(fullscreen);

    fullscreen.setSize(100, settings.getHeight());
    fullscreen.setLocation(settings.getX() + (settings.getWidth() / 2) - 50, light.getY() + 35);

    fullscreen.addActionListener(new ActionListener() {

    public void actionPerformed(ActionEvent e) {

        if(isFullscreen) {

            isFullscreen = false;

            screen.ifNotFullscreen();
        }


        if(!isFullscreen) {

            isFullscreen = true;

            screen.ifFullscreen(screen);
        }

        mm.revalidate();
    }
});
这是JFrame:

public class Screen extends JFrame {

    private Kingdomcraft kd;
    private MainMenu mm;
    private Screen screen;
    private Dimension min = new Dimension(800, 600);
    private ImageIcon img;

    public void run() {

        kd = new Kingdomcraft();
        mm = new MainMenu();
        screen = new Screen();
        img = new ImageIcon("assets/textures/items/ItemSwordIron.png");

        this.add(kd);
        this.setContentPane(mm);
        this.setLocationRelativeTo(null);
        this.setTitle("Kingdomcraft");
        this.setIconImage(img.getImage());
        this.setBackground(Color.BLACK);
        this.pack();
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        mm.setOpaque(false);
        mm.run();

        if (mm.isFullscreen) {

            ifFullscreen(screen);
        }

        if (!mm.isFullscreen) {

            ifNotFullscreen();
        }
    }

    public void ifFullscreen(Screen screen) {

        this.screen = screen;
        this.setVisible(true);

        GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow(screen);

        repaint();
    }

    public void ifNotFullscreen() {

        this.setMinimumSize(min);
        this.setResizable(true);
        this.setVisible(true);

        repaint();
    }
}
为什么当我运行游戏并选择JButton全屏时,JPanel渲染错误


我的意思是有一个大的灰色JPanel,在我的黑色背景上没有呈现任何按钮。

问题是你正在创建多个不同的屏幕实例,但你完全不知道屏幕上到底是哪一个

Kingdomcraftmain,创建一个Screen实例并调用Screen.run,它创建一个KindomCraftMain、MainMenu和Screen实例……但是等等,我们是Screen,为什么我们需要另一个实例?然后继续向屏幕实例添加内容,将屏幕实例留空

<> P>真正奇怪的是,你会把屏幕的实例传递给iFulLCuffs。这是一个空白的版本,它会尝试使它成为全屏……没有任何东西…但是IFuffFulcScript实际上使用这个??? 更奇怪的是…当你从Screenrun调用MainMenurun时,你创建了一个新的Kingdomcraft实例,MainMenu和Screen…再一次

当全屏按钮被操作时,您正在传递您在主菜单中创建的屏幕的参考,该屏幕上没有内容,应该显示在屏幕上

基本上,您似乎不了解new的功能以及对象实例之间的差异。新实例与同一对象的任何其他实例没有关系

您应该做的是将Kingdomcraft的引用传递到屏幕,然后将Screen的引用传递到主菜单。这些类都不应该创建自己的实例或Kingdomcraft或Screen的实例

链中的每个链接都应该能够提供对上一个链接的访问,这样主菜单应该能够在需要时向屏幕请求对Kingdomcraft的引用

此外,Swing不是线程安全的。除了事件调度线程之外,您不应该与任何线程中的任何组件进行交互

有关更多详细信息,请参阅


从外观上看,我认为您需要回到基础上来,看看对象引用是如何工作的……

我看不到任何JButton变量,当然也没有添加到GUI中的变量。请考虑创建和发布一个为您复制您的问题,因为它在那里。我只是有麻烦过滤我的所有代码发现什么是重要的,包括JButt没有显示,但它被命名为全屏,你可以看到它,一旦我编辑它在某种程度上是一种艺术来做到这一点,但相信我,这是一个值得做的练习,即使你没有在这里发帖。通常,减少所有分散注意力的代码和暴露问题的赤裸裸的努力会让你自己清楚地看到问题并找到自己的解决方案。这就是我的jbutton的完整性,而不是通常的jbutton fullscreen=new jbutton;别难过。学我8岁时就开始编写代码了,gotos和gosubs的好时光……不管怎么说,我很确定我读到了一些文章,没有把awt和swing混用在一起,所以我该如何设置awt的全屏效果呢?你不应该把重量级组件awt和轻量级组件swing混用。Swing基于AWT。JFrame从窗口扩展而来,窗口是AWT组件。ik JFrame对框架ik的扩展比你们想象的要多,只是堆栈溢出不允许问题太广泛,所以它把我搞砸了。总之,我的意思是我使用awt中的GraphicsEnvironment类使其全屏显示。还有别的办法吗?嗯。。对不起,如果那是个愚蠢的问题