Java: удалить поля / отступы на JTabbedPane - PullRequest
5 голосов
/ 03 марта 2011

Я хотел бы знать, как убрать поля между моей JtabbedPane и моей панелью контента JFrame, а также между моей JTabbedPane и ее внутренней JPanel. Я обвел поля, которые хочу удалить. зеленая линия здесь, чтобы показать зазор между jpanel внутри jtabbedpane.

Я пытался взглянуть на какой-то метод с именем setMargin, но он не существует в JTabbedPane. Я также проверил Hgap и Vgap (оба = 0) на другом макете (корневая панель содержимого, моя jpanel и т. Д.).

Так что любые предложения приветствуются. Спасибо.

The image is here.

Я пока не могу публиковать изображения.

Ответы [ 3 ]

7 голосов
/ 03 марта 2011

Решение о том, сколько места вокруг компонентов внутри панели с вкладками, зависит от внешнего вида - как правило, это будет сделано на основе того, что по умолчанию используется для вашего рабочего стола. JTabbedPane не имеет методов для установки вставок вокруг внутренних компонентов.

Вы можете установить это глобально для всех панелей с вкладками (предостережение: Работает на MetalLookAndFeel, , вероятно, также будет работать для Windows L & F, вероятно, не будет работать для GTK или Nimbus, которые не основаны на BasicLookAndFeel). Это изменит внешний вид всех панелей с вкладками в виртуальной машине :

UIManager.getDefaults().put("TabbedPane.contentBorderInsets", new Insets(0,0,0,0));
UIManager.getDefaults().put("TabbedPane.tabsOverlapBorder", true);

Вы, вероятно, также хотите убедиться, что в вашем JTabbedPane есть EmptyBorder (0,0,0,0), и также как и компоненты, которые вы в него вставили.

Если это не работает на вашем целевом рабочем столе, альтернативы

  • если вы не заботитесь о том, чтобы ваши панели с вкладками выглядели иначе, чем собственные панели с вкладками приложений, (неприятная) альтернатива - написать собственный TabbedPaneUI
  • установить делегат пользовательского интерфейса для единственного JTabbedPane, который вы хотите выглядеть, как MetalTabbedPaneUI или некоторый другой делегат пользовательского интерфейса, который отвечает на эти свойства
6 голосов
/ 08 апреля 2013

Я только что столкнулся с той же проблемой, и никто другой не сказал, что это полное решение, поэтому я придумал следующее:

    import javax.swing.plaf.basic.BasicTabbedPaneUI;

    tabbedPane.setUI(new BasicTabbedPaneUI() {
        private final Insets borderInsets = new Insets(0, 0, 0, 0);
        @Override
        protected void paintContentBorder(Graphics g, int tabPlacement, int selectedIndex) {
        }
        @Override
        protected Insets getContentBorderInsets(int tabPlacement) {
            return borderInsets;
        }
    });

Он работает так же, не переопределяя метод paintContentBorder, однако, вероятно, это делает интерфейс пользователя несколько более эффективным при изменении размера или аналогичном, так как стандартный, похоже, делегирует ряду других методов.

Протестировано на Oracle Java 6 u43 для Linux в WindowMaker, Mac OS X 10.6.7 с Mac Java 6 u37 и Windows 7 с Java 7 u07, надеюсь, это кому-нибудь поможет: -)

1 голос
/ 03 марта 2011

Поля добавляются путем установки границ для элементов пользовательского интерфейса. Взгляните на настройки границы вашего JTabbedPane.

...