Java 使用相同高度的两个面板显示方式不同
我正在尝试使用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
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是的,我的坏!已添加到页面结尾,但现在已将其更改为行开始,并且它似乎正在工作,非常感谢!