如何删除JTabbedPane边框?

How to remove JTabbedPane border?

提问人: 提问时间:11/4/2023 最后编辑:camickr 更新时间:11/5/2023 访问量:43

问:

我想删除笨拙的蓝色边框,我无法通过这样做来删除。有什么方法可以做到这一点?myTabbedPane.setBorder(null);

这是我说的蓝色边框:

https://i.stack.imgur.com/RlAh5.png

由于我是 swing java 库的新手,我还想知道如果没有方法/它不起作用,组件的所有属性是如何更改的。我听说有一种叫做UIManager的东西,但我找不到关于它的有用信息。

我唯一尝试的是调用setBorder属性并对其调用null。

Java 摆动 边框 jtabbedpane

评论

1赞 camickr 11/4/2023
我还想知道如果没有方法/它不起作用,组件的所有属性是如何更改的。- 然后,您需要为该组件创建一个自定义 UI 类,并自己进行自定义绘制。一般来说不是一个好主意。我听说有一种叫做 UIManager 的东西 - 每个 LAF 都为组件定义了一些可以更改的属性。请参阅:UIManager 默认值。您还可以使用“jtabbedpane border”搜索此站点,以获取有关此主题的其他帖子。
0赞 Community 11/6/2023
请提供足够的代码,以便其他人可以更好地理解或重现问题。

答:

1赞 Michael 11/5/2023 #1

这些属性由您正在使用的外观(例如Windows L&F或Metal L&F)定义。

您可以全局更改这些属性(即这适用于您正在使用的所有 JTabbedPanes)。以下代码适用于 Windows L&F 和 Motiv L&F(您需要检查其他 L&F 实现):

import javax.swing.SwingUtilities;
import javax.swing.JFrame;
import javax.swing.JTabbedPane;
import javax.swing.JPanel;
import javax.swing.UIManager;
import java.awt.BorderLayout;
import java.awt.Insets;

public class Main extends JFrame {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new Main());
    }

    public Main() {
        this.setLayout(new BorderLayout());

        JTabbedPane pane = new JTabbedPane();
        pane.addTab("A", new JPanel());
        pane.addTab("B", new JPanel());
        pane.addTab("C", new JPanel());

        Insets insets = UIManager.getInsets("TabbedPane.contentBorderInsets");
        insets.top = -1;
        insets.bottom = -1;
        insets.left = -1;
        insets.right = -1;
        UIManager.put("TabbedPane.contentBorderInsets", insets);

        this.add(pane, BorderLayout.CENTER);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(800, 600);
        this.setVisible(true);
    }

}