Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在禁用Jtabbedpane中的选项卡时,该选项卡的外观没有变化_Java_Swing_Jtabbedpane - Fatal编程技术网

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

Java 在禁用Jtabbedpane中的选项卡时,该选项卡的外观没有变化,java,swing,jtabbedpane,Java,Swing,Jtabbedpane,我使用的是JTabbedPane。在这种情况下,我必须禁用一些选项卡。我使用setEnabledAt(index,false)方法禁用该选项卡。该选项卡实际上已被禁用,但我无法获得外观和感觉[禁用选项卡文本的颜色变为浅色]。我如何纠正它 首先,我使用java的默认外观。。。现在我将外观和感觉更改为nimbus。。我发现颜色发生了变化,但禁用的选项卡看起来不像禁用的复选框或单选按钮或其他组件。我不知道应该有外观的变化,但使用UIManager.put,您可以更改非常特定部分的外观,我敢打赌,通过

我使用的是JTabbedPane。在这种情况下,我必须禁用一些选项卡。我使用setEnabledAt(index,false)方法禁用该选项卡。该选项卡实际上已被禁用,但我无法获得外观和感觉[禁用选项卡文本的颜色变为浅色]。我如何纠正它



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

我不知道应该有外观的变化,但使用UIManager.put,您可以更改非常特定部分的外观,我敢打赌,通过手动更改禁用选项卡的外观/感觉,您可能会得到您想要的

您可以查看此页面以获得一些帮助,以及指向所有外观选项的链接

  • JTabbedPan
    e的大多数方法在API中受保护,不能从
    Swing方法中访问

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

  • 正确的方法是实现,其中一部分也使用受保护的方法覆盖
    JTabbedPane

  • 举例

  • 您可以很容易地更改禁用选项卡的
    前景
    ,但只有使用HTML语法才能正常工作

代码

tabbedPane.setTitleAt(2“)
+tabbedPane.getTitleAt(int-tab)+“”;
  • 我建议使用自定义的
    外观
    或使用
    HTML

    • 也许您有自己的选项卡组件

      然后必须将启用状态委托给该组件

      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 );
                  }
              } );
          }
      
      }
      
      我想您真正想要的是禁用“已禁用”选项卡上的所有组件

      Swing的工作方式与父组件的setEnabled()对子组件有任何影响的方式不同——您需要自己对每个子组件调用setEnabled(false)(毕竟您可能希望启用其中的一些组件,所以Swing不做任何假设,完全由您自己决定)

      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 );
                  }
              } );
          }
      
      }