BasicTabbedPaneUI показывает границу в фокусе - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь создать пользовательский TabbedPaneUI, расширяя BasicTabbedPaneUI

У меня проблема с настройкой TextColor. Когда я устанавливаю TextColor, отображается рамка, когда панель сфокусирована и включена.

enter image description here

Как вы можете видеть, панель с заголовком Test включена / выбрана. Панель имеет белую рамку, и я не хочу, чтобы она была. Я уже переопределил paintTabBorder

@Override
protected void paintTabBorder(Graphics g, int tabPlacement, int tabIndex, int x, int y, int w, int h, boolean isSelected) {
    //We do nothing here to disable painting the Tab Border
}

вот как я переопределяю paintText, чтобы изменить цвет текста

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

    g.setFont(font);

    View v = getTextViewForTab(tabIndex);
    if (v != null) {
        // html
        v.paint(g, textRect);
    } else {
        // plain text
        int mnemIndex = tabPane.getDisplayedMnemonicIndexAt(tabIndex);

        if (tabPane.isEnabled() && tabPane.isEnabledAt(tabIndex)) {

            //Change the text to White here <- Causing Border Issues
            g.setColor(Color.WHITE);

            SwingUtilities2.drawStringUnderlineCharAt(tabPane, g,
                    title, mnemIndex,
                    textRect.x, textRect.y + metrics.getAscent());

        } else { // tab disabled
            g.setColor(tabPane.getBackgroundAt(tabIndex).brighter());
            SwingUtilities2.drawStringUnderlineCharAt(tabPane, g,
                    title, mnemIndex,
                    textRect.x, textRect.y + metrics.getAscent());
            g.setColor(tabPane.getBackgroundAt(tabIndex).darker());
            SwingUtilities2.drawStringUnderlineCharAt(tabPane, g,
                    title, mnemIndex,
                    textRect.x - 1, textRect.y + metrics.getAscent() - 1);

        }
    }
}

g.setColor(Color.WHITE); вызывает проблему с границей, я подтвердил это, установив Цвет на что-то другое, а не на Белый, а граница была таким же цветом, как и Текст.

Ответы [ 2 ]

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

После небольшого исследования я выяснил, как исправить проблему с границей, которую я должен был задать для графического цвета после рисования строки. g.setColor(selectColor);

            //Change the text to White here <- Causing Border Issues
            g.setColor(Color.WHITE);

            SwingUtilities2.drawStringUnderlineCharAt(tabPane, g,
                    title, mnemIndex,
                    textRect.x, textRect.y + metrics.getAscent());

            //reset the color to selectedColor
            g.setColor(selectColor);
0 голосов
/ 15 ноября 2018

Просто нарисуйте еще один пустой заголовок с цветом фона, чтобы эффективно скрыть границу.

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

    g.setFont(font);

    View v = getTextViewForTab(tabIndex);
    if (v != null) {
        // html
        v.paint(g, textRect);
    } else {
        // plain text
        int mnemIndex = tabPane.getDisplayedMnemonicIndexAt(tabIndex);

        if (tabPane.isEnabled() && tabPane.isEnabledAt(tabIndex)) {

            //Change the text to White here
            g.setColor(Color.WHITE);

            SwingUtilities2.drawStringUnderlineCharAt(tabPane, g,
                    title, mnemIndex,
                    textRect.x, textRect.y + metrics.getAscent());

            //Remove Border Issues
            g.setColor(tabPane.getBackgroundAt(tabIndex).darker());

            SwingUtilities2.drawStringUnderlineCharAt(tabPane, g,
                    "", mnemIndex,                                 //<-- empty title here
                    textRect.x, textRect.y + metrics.getAscent());

        } else { // tab disabled
            g.setColor(tabPane.getBackgroundAt(tabIndex).brighter());
            SwingUtilities2.drawStringUnderlineCharAt(tabPane, g,
                    title, mnemIndex,
                    textRect.x, textRect.y + metrics.getAscent());
            g.setColor(tabPane.getBackgroundAt(tabIndex).darker());
            SwingUtilities2.drawStringUnderlineCharAt(tabPane, g,
                    title, mnemIndex,
                    textRect.x - 1, textRect.y + metrics.getAscent() - 1);

        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...