Java 使用相同高度的两个面板显示方式不同

Java 使用相同高度的两个面板显示方式不同,java,macos,swing,jframe,jpanel,Java,Macos,Swing,Jframe,Jpanel,我正在尝试使用Java制作一个全屏GUI,在JFrame上,它有2个JPanel,其中一个只占大约0.10的屏幕宽度。当我使用相同的高度将这些面板放置在框架上时,它们在Linux和Mac OS上显示的高度不同,但在Windows上显示的高度正常。有人知道如何使Linux和Mac操作系统的两个面板高度相同吗?我使用WindowBuilder在这里发布,很快就解决了这个问题 package View; import java.awt.Color; import java.awt.EventQueu

我正在尝试使用Java制作一个全屏
GUI
,在
JFrame
上,它有2个
JPanel
,其中一个只占大约0.10的屏幕宽度。当我使用相同的高度将这些面板放置在框架上时,它们在Linux和Mac OS上显示的高度不同,但在Windows上显示的高度正常。有人知道如何使Linux和Mac操作系统的两个面板高度相同吗?我使用
WindowBuilder
在这里发布,很快就解决了这个问题

package View;

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GraphicsDevice;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

import controller.ExitActionListener;
import java.awt.event.ActionListener;

public class TestFrame2 {

    private JFrame frame;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    TestFrame2 window = new TestFrame2();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public TestFrame2() {
        initialize();
    }

    private void initialize() {
        frame = new JFrame();
        GraphicsDevice device = frame.getGraphicsConfiguration().getDevice();
        frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
        frame.setUndecorated(true);
        frame.setVisible(true);

        JPanel panel = new JPanel();
        panel.setSize((int)(frame.getWidth()*0.1), frame.getHeight());
        panel.setBackground(Color.BLACK);
        frame.getContentPane().add(panel);

        JPanel panel1 = new JPanel();
        panel1.setBackground(Color.RED);
        panel1.setSize(frame.getWidth(), frame.getHeight());
        frame.getContentPane().add(panel1);

        // temporary close button
        ActionListener exitActionListener = new ExitActionListener();
        JButton exit = new JButton("Exit System");
        exit.setBounds(150 ,200, 150, 100);
        exit.addActionListener(exitActionListener);
        panel1.add(exit);

        //Set program as full screen
        device.setFullScreenWindow(frame);
    }
}

你可以发布一个屏幕截图,它在Linux/Mac操作系统上是如何显示的吗?顺便说一句,我会尝试覆盖面板的
getPreferredSize()
方法,而不是
setSize()
,并将其添加到
BorderLayout.LINE\u START
/
BorderLayout.WEST
。而且您的setBounds调用不会有多大作用,因为panel1有一个(
Flow
)布局。(这很好,也许一个
FlowLayout(FlowLayout.LEFT))
会达到你想要的按钮位置)@LuxxMiner下面是它在Mac OS上的显示屏幕截图:。我尝试过使用getPreferredSize()和BorderLayout,但这导致黑色面板在屏幕底部延伸。另外,我想说的是,计划是两个面板都使用GridBagLayout,一旦它们正确显示,并且按钮的位置不相关,它只用于逃避全屏。您将面板添加到了哪里?可能是
BorderLayout.SOUTH
BorderLayout.PAGE\u END
?我在你的代码中使用了
BorderLayout
,它在
BorderLayout.LINE\u START
@LuxxMiner是的,我的坏!已添加到页面结尾,但现在已将其更改为行开始,并且它似乎正在工作,非常感谢!你可以发布一个屏幕截图,它在Linux/Mac操作系统上是如何显示的吗?顺便说一句,我会尝试覆盖面板的
getPreferredSize()
方法,而不是
setSize()
,并将其添加到
BorderLayout.LINE\u START
/
BorderLayout.WEST
。而且您的setBounds调用不会有多大作用,因为panel1有一个(
Flow
)布局。(这很好,也许一个
FlowLayout(FlowLayout.LEFT))
会达到你想要的按钮位置)@LuxxMiner下面是它在Mac OS上的显示屏幕截图:。我尝试过使用getPreferredSize()和BorderLayout,但这导致黑色面板在屏幕底部延伸。另外,我想说的是,计划是两个面板都使用GridBagLayout,一旦它们正确显示,并且按钮的位置不相关,它只用于逃避全屏。您将面板添加到了哪里?可能是
BorderLayout.SOUTH
BorderLayout.PAGE\u END
?我在你的代码中使用了
BorderLayout
,它在
BorderLayout.LINE\u START
@LuxxMiner是的,我的坏!已添加到页面结尾,但现在已将其更改为行开始,并且它似乎正在工作,非常感谢!