Заголовок вкладки JTabbedPane оставляет отступ при изменении шрифта - PullRequest
0 голосов
/ 17 ноября 2018

Я пишу пользовательский BasicTabbedPaneUI Я переопределил paintText и изменил размер шрифта внутри него, но это оставляет нежелательные дополнительные отступы справа от вкладки.

enter image description here

, как вы видите, отступы довольно большие, я бы хотел, чтобы они были такими же, как и на левой стороне.Так что это мой код

import sun.swing.SwingUtilities2;

import javax.swing.*;
import javax.swing.plaf.basic.BasicTabbedPaneUI;
import java.awt.*;

public class UITest {

    public static void main(String[] args) {
        JFrame jFrame = new JFrame();
        JTabbedPane jTabbedPane = new JTabbedPane();
        jTabbedPane.add(new JPanel(), "This is a test title");
        jTabbedPane.add(new JPanel(), "This is also a test title");
        jTabbedPane.setUI(new LynxTabbedPane());
        jFrame.setContentPane(jTabbedPane);
        jFrame.setSize(300, 100);
        jFrame.setVisible(true);
    }

    public static class LynxTabbedPane extends BasicTabbedPaneUI {

        @Override
        protected void paintText(Graphics g, int tabPlacement, Font font, FontMetrics metrics, int tabIndex, String title, Rectangle textRect, boolean isSelected) {

            Font myFont = new Font(font.getFontName(), Font.BOLD, 10);
            g.setFont(myFont);
            g.setColor(Color.WHITE);

            SwingUtilities2.drawStringUnderlineCharAt(tabPane,
                    g, title,
                    tabPane.getDisplayedMnemonicIndexAt(tabIndex),
                    textRect.x, metrics.getAscent() + 2);
        }
    }
}

Я бы предположил, что мне нужно вычислить tabWidth, поэтому я попытался переопределить его и вычесть из 5, но, но он не изменился, поэтому теперь я не в курсе.

        @Override
        protected int calculateTabWidth(int tabPlacement, int tabIndex, FontMetrics metrics) {
            return super.calculateTabWidth(tabPlacement, tabIndex, metrics) - 5;
        }

1 Ответ

0 голосов
/ 18 ноября 2018

Завершено с помощью setFont объекта JTabbedPane, поскольку он автоматически обрабатывает размер вкладки, который должен быть

    Font myFont = new Font(tabbedPane.getFont().getFontName(), Font.BOLD, 10);
    tabbedPane.setFont(myFont);
...