在禁用Jtabbedpane中的选项卡时,该选项卡的外观没有任何变化

时间:2012-08-02 13:57:17

标签: java swing jtabbedpane

我正在使用JTabbedPane。在这里我必须禁用一些选项卡。我使用setEnabledAt(index,false)方法禁用选项卡。选项卡实际上已禁用,但我没有外观和感觉[禁用选项卡文本的颜色变为浅色]。我该如何纠正呢?


首先我使用java的默认外观...现在我将外观改为nimbus ..我发现颜色发生了变化但是禁用的选项卡看起来不像是禁用复选框或单选按钮或其他组件。

4 个答案:

答案 0 :(得分:2)

我认为真正想要的是禁用禁用标签上的所有组件?

Swing不能像父组件的setEnabled()对子组件有任何影响那样工作 - 你需要自己在每一个上调用setEnabled(false)(毕竟你可以希望其中一些已启用,因此Swing不做任何假设并将其完全留给您。)

答案 1 :(得分:1)

我不知道应该更改LookAndFeel,但是使用UIManager.put,你可以改变非常特殊部分的LookAndFeel,我敢打赌通过手动改变外观/感觉在禁用选项卡中,您可以获得所需的内容。

您可以查看此页面以获取一些帮助,以及指向所有外观/感觉选项的链接 http://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/color.html

答案 2 :(得分:1)

  • JTabbedPan e的大部分方法都在API中受到保护,而且无法从Swing methods

  • 访问
  • 必须查找Custom XxxTabbedPaneUI,覆盖这些方法,并且可以从外部访问

  • 正确的方法是实施Custom Look & Feel only,其中一部分覆盖JTabbedPane protected methods

  • Custom XxxTabbedPaneUI

  • 的示例
  • 您可以非常轻松地更改已禁用标签的Foreground,但只能使用HTML语法正常工作

tabbedPane.setTitleAt(2, "<html><font color="
    + (tabbedPane.isEnabledAt(int tab) ? "black" : "red") + ">"
    + tabbedPane.getTitleAt(int tab) + "</font></html>");
  • 我建议使用自定义Look and Feel或使用Foreground
  • 简单地更改HTML

答案 3 :(得分:1)

也许你有一个自己的Tab-Component?

然后您必须将Enable-State委托给此Component。

import java.awt.Component;
import java.awt.Dimension;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTabbedPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UIManager.LookAndFeelInfo;

public class Display extends JFrame {

    public Display() {
        super("Enable");
        this.setDefaultCloseOperation( EXIT_ON_CLOSE );
        this.setSize( new Dimension(300,300) );
        this.setLocationRelativeTo( null );

        JTabbedPane tabs = new JTabbedPane() {

            // delegating to tabComponent 
            @Override
            public void setEnabledAt( int index, boolean enabled ) {
                super.setEnabledAt( index, enabled );
                Component tabComponent = getTabComponentAt( index );
                if(tabComponent != null) {
                    getTabComponentAt( index ).setEnabled( enabled );
                }
            }
        };  

        JComponent component = new JLabel("Lorem");
        tabs.addTab( "", component );
        JLabel custom = new JLabel("disabled");
        tabs.setTabComponentAt( tabs.indexOfComponent( component ), custom );

        tabs.addTab( "enabled", new JLabel("Ipsum") );
        tabs.addTab( "disabled", new JLabel("Dolor") );
        tabs.addTab( "enabled", new JLabel("Sit") );
        tabs.addTab( "enabled", new JLabel("Amet") );
        tabs.setEnabledAt( 0, false );
        tabs.setEnabledAt( 2, false );
        tabs.setSelectedIndex( 1 );
        this.getContentPane().add( tabs );
    }

    public static void main( String[] args ) throws Exception {
        for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
            if ("Windows".equals(info.getName())) {
                UIManager.setLookAndFeel(info.getClassName());
                break;
            }
        }
        SwingUtilities.invokeLater( new Runnable() {
            @Override
            public void run() {
                new Display().setVisible( true );
            }
        } );
    }

}