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 怎么单独设置某一行的颜色

java swing 日历控件怎么实现 最好是源码

WPF中Popup控件在Win7以及Win10等中的对齐点方式不一样的解决方案 - 简书

java的swing组件的使用

java中的swing设计界面时怎么加上背景图片。而不覆盖啥label等控件?

java如何内置visio控件