我无法将几个组件添加到JFrame

时间:2016-02-14 21:52:20

标签: java swing jframe jpanel boxlayout

我正在尝试创建一个全屏JFrame,然后由三个JPanel组成 - 一个简单的世界地图占据屏幕的上部2/3,然后屏幕的底部1/3分成两个JPanels屏幕的宽度,一个在另一个的顶部。

这是我的类,其中包含main函数:

import javax.swing.*;

public class Risk extends JFrame {

    private static JFrame mainFrame;
    private static JPanel panel;
    private static int displayWidth, displayHeight, mapWidth, mapHeight;

    public static void main(String[] args) {

        DisplaySizeCalculator display = new DisplaySizeCalculator();
        displayWidth = display.getScreenWidth();
        displayHeight = display.getScreenHeight();

        mapWidth = displayWidth;
        mapHeight = (displayHeight - 200);
        mainFrame = new JFrame();
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    //  mainFrame.setSize(displayWidth, displayHeight);
        mainFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);

        panel = new JPanel();
        panel.setLayout(new BoxLayout(mainFrame, BoxLayout.Y_AXIS));

        panel.add(new Map(mapWidth, mapHeight));

        panel.add(new JButton("Hi"));

        mainFrame.add(panel);
        mainFrame.pack();
        mainFrame.setVisible(true);
    }

}

我还有另外两个课程 - MapDisplaySizeCalculatorMap是一个扩展JPanel的类,它有一个带宽度和高度的构造函数,还有一个paint方法,它根据这个宽度和高度绘制地图。 DisplaySizeCalculator是获取运行程序的屏幕尺寸的类。

截至目前,我的计划输出this

我尝试了很多方法来向框架添加其他组件,但都没有成功。我认为实现这一目标的最好方法是创建一个JPanel来包含其他三个。此面板将使用BoxLayout垂直添加每个组件。然后我会将此面板添加到mainFrame。当我尝试这个时,我收到一条错误BoxLayout can't be shared

我使用了许多不同的组合来添加另一个JPanel但是我得到一个完全空白的框架,或者只是第二个面板显示没有地图,以及许多其他不正确的输出。

什么是我的问题的最佳解决方案?我是使用Java UI工具的新手,所以我真的有点迷失,试图解决这个问题。

如果您需要我的代码中的更多信息,请与我们联系。谢谢

修改

我已经编辑了上面的Risk课程,以示我尝试将地图和其他组件添加到更大的JPanel,然后将其添加到mainFrame

以下是其他类以及错误:

Map.java

DisplaySizeCalculator.java

Constants.java

Error

编辑2

我刚刚意识到,感谢@HovercraftFullOfEels我将mainFrame传递给BoxLayout构造函数而不是panel

0 个答案:

没有答案