嵌套JTabbedPanes时,父级和子级之间会有明显的颜色变化。

这是说明问题的屏幕截图:



您将如何使过渡更加平滑?

在使用其他布局或组件方面是否有其他选择?

最佳答案

这是因为JTabbedPane不透明。尝试在选项卡式窗格中调用setOpaque(false),例如:

JTabbedPane outer = new JTabbedPane();
outer.setOpaque(false);
// ...
// creating inner pane "Modificar"
JTabbedPane modificar = new JTabbedPane();
modificar.setOpaque(false);
outer.addTab("Modificar", modificar);


但是,它可能不适用于所有外观。例如,GTK L&F忽略在setOpaque()上对JToolbar的调用。

另一种选择是使用透明的JPanel,将FlowLayoutJToggleButton分组为单个ButtonGroup而不是JTabbedPane,例如

private void initComponents() {
    JTabbedPane outer = new JTabbedPane();
    outer.setOpaque(false);
    // ...

    JPanel innerPane = new JPanel();
    innerPane.setOpaque(false);
    innerPane.setLayout(new FlowLayout());

    ButtonGroup group = new ButtonGroup();
    addButton(innerPane, group, new JToggleButton("alta"));
    addButton(innerPane, group, new JToggleButton("Modificar")).setSelected(true);
    addButton(innerPane, group, new JToggleButton("compraTarifa"));

    outer.addTab("Socios", innerPane);

    // ...
}

private static <T extends AbstractButton> T addButton(Component parent, ButtonGroup group, T btn) {
    group.add(btn);
    parent.add(btn);
    return btn;
}

09-04 15:05