我正在尝试创建一个全屏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);
}
}
我还有另外两个课程 - Map
和DisplaySizeCalculator
。 Map
是一个扩展JPanel的类,它有一个带宽度和高度的构造函数,还有一个paint方法,它根据这个宽度和高度绘制地图。 DisplaySizeCalculator
是获取运行程序的屏幕尺寸的类。
截至目前,我的计划输出this。
我尝试了很多方法来向框架添加其他组件,但都没有成功。我认为实现这一目标的最好方法是创建一个JPanel来包含其他三个。此面板将使用BoxLayout
垂直添加每个组件。然后我会将此面板添加到mainFrame
。当我尝试这个时,我收到一条错误BoxLayout can't be shared
。
我使用了许多不同的组合来添加另一个JPanel但是我得到一个完全空白的框架,或者只是第二个面板显示没有地图,以及许多其他不正确的输出。
什么是我的问题的最佳解决方案?我是使用Java UI工具的新手,所以我真的有点迷失,试图解决这个问题。
如果您需要我的代码中的更多信息,请与我们联系。谢谢
修改
我已经编辑了上面的Risk
课程,以示我尝试将地图和其他组件添加到更大的JPanel,然后将其添加到mainFrame
。
以下是其他类以及错误:
编辑2
我刚刚意识到,感谢@HovercraftFullOfEels我将mainFrame
传递给BoxLayout
构造函数而不是panel
。