Java swing菜单控件不对齐
Posted
技术标签:
【中文标题】Java swing菜单控件不对齐【英文标题】:Java swing menu control not align 【发布时间】:2021-11-25 22:41:28 【问题描述】:我创建了一个 Swing 应用程序,它在 2 台装有 JDK8 的笔记本电脑上看起来不错,但在第三台笔记本电脑上,所有菜单控件都几乎没有下降。我正在附上图片。 我创建了 maven 结构,其中存在以下 java 文件和 pom。只有这两个文件。使用 maven 或 main 方法运行。
Java 代码
package com.sv.test;
import javax.swing.*;
import java.awt.*;
public class Test extends JFrame
public Test()
JMenuBar mb = new JMenuBar();
JMenu m = new JMenu("*");
mb.add(m);
JToolBar tb = new JToolBar();
tb.setFloatable(false);
tb.setRollover(false);
tb.add(new JTextField(15));
tb.add(new JTextField(15));
tb.add(mb);
JButton exit = new JButton("Exit");
exit.addActionListener(e -> System.exit(0));
tb.add(exit);
tb.setBackground(Color.orange);
getContentPane().add(tb);
pack();
setLocationRelativeTo(null);
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
public static void main(String[] args)
new Test();
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sv</groupId>
<artifactId>Test</artifactId>
<version>1.0</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
编译命令
mvn install
运行命令
mvn exec:java -D"exec.mainClass"="com.sv.test.Test"
【问题讨论】:
如何重现问题?它依赖于分辨率吗?依赖 LAF?操作系统? 笔记本电脑有 JDK1.8.0_251,但我无法在其他笔记本电脑上重现。 JMenuBar 添加到 JFrame,而不是 JToolBar。将 setDefaultCloseOperation 方法调用移到 pack 方法调用之上。 没有吉尔伯特,检查代码 - tb.add (mb)。另外,我尝试通过移动 pack 方法,但结果保持不变。 当@GilbertLeBlanc 写“JMenuBar 被添加到JFrame”时,他的意思是菜单栏应该被添加到框架中。使用JFrame.setJMenuBar(JMenuBar)
来做到这一点。
【参考方案1】:
JToolbar 的默认布局是 BoxLayout。如果将 JMenu 作为 JToolbar 中的一项,则会由于 BoxLayout 而关闭。 您需要手动设置布局和管理边距,这将解决您的问题。 我在您的代码中添加了以下行,它可以工作,但在按钮之间放置了一些边距。
tb.setLayout (new FlowLayout());
您可以阅读更多关于 JToolbar here
【讨论】:
哇!!我仍然不确定为什么它可以在其他两台笔记本电脑上工作。唯一的区别是他们有 JDK 11 但通过 maven 我使用的是 8 版本。您的建议在所有机器上都可以正常工作,是的,我需要更正边距。谢谢。以上是关于Java swing菜单控件不对齐的主要内容,如果未能解决你的问题,请参考以下文章
java swing控件JTable 怎么单独设置某一行的颜色
WPF中Popup控件在Win7以及Win10等中的对齐点方式不一样的解决方案 - 简书