Отключенная вкладка JTabbedPane не заполняет JPanel, а выбранная - - PullRequest
0 голосов
/ 17 ноября 2018

У меня есть пользовательский JTabbedPane, у меня проблема с тем, чтобы сделать вкладки одинакового размера.

enter image description here

, как вы можете видеть наimage, Зеленая вкладка выбрана, в то время как красная не выбрана, я бы хотел, чтобы красная вкладка (невыбранная) была такого же размера, как зеленая вкладка (выбрана), вот мой код

вот код.

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(), "test");
        jTabbedPane.add(new JPanel(), "test2");
        jTabbedPane.setUI(new LynxTabbedPane());
        jFrame.setContentPane(jTabbedPane);
        jFrame.setSize(200,200);
        jFrame.setVisible(true);
    }

    public static class LynxTabbedPane extends BasicTabbedPaneUI {
        private Polygon shape;

        @Override
        protected void paintTabBackground(Graphics g, int tabPlacement, int tabIndex, int x, int y, int w, int h, boolean isSelected) {
            Graphics2D g2D = (Graphics2D) g;
            int xp[] = new int[]{x, x, x + w, x + w, x};
            int yp[]  = new int[]{y, y + h, y + h, y, y};
            shape = new Polygon(xp, yp, xp.length);
            if (isSelected) {
                g2D.setColor(Color.GREEN);
            } else if (tabPane.isEnabled() && tabPane.isEnabledAt(tabIndex)) {
                g2D.setColor(Color.RED);
            }
            g2D.fill(shape);
        }
    }
}

1 Ответ

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

Я исправил проблему, переместив g2D.fill(shape); внутрь isSelected

@Override
protected void paintTabBackground(Graphics g, int tabPlacement, int tabIndex, int x, int y, int w, int h, boolean isSelected) {
    Graphics2D g2D = (Graphics2D) g;
    int xp[] = new int[]{x, x, x + w, x + w, x};
    int yp[]  = new int[]{y, y + h, y + h, y, y};

    shape = new Polygon(xp, yp, xp.length);
    if (isSelected) {
        g2D.fill(shape);
        g2D.setColor(selectColor);
    } else if (tabPane.isEnabled() && tabPane.isEnabledAt(tabIndex)) {
        g2D.setColor(deSelectColor);
    }
}

Это заполнит ее только формой, если выбрана вкладка.

Результат:

enter image description here

...