Управление раскрашивает Java область с вкладками

Я сходил с ума, пытаясь понять это.

Я пытаюсь устранить голубой фон, который появляется в JTabbedPane. Я попробовал все, и ничто, кажется, не работает.

Ниже мой код. При выполнении его это покажет вкладку при выборе с голубым фоном и вещью синяя граница наверху. Я хочу управлять этим цветом. Но как?

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.plaf.ColorUIResource;
public class Main extends JFrame {
  JTabbedPane tab=new JTabbedPane();
  public Main() {
     setSize(300,300);
     setTitle("Test Tab pane");
     tab.add("First",new myPanel("First"));
     tab.add("Second",new myPanel("Second"));
     tab.add("Third",new myPanel("Third"));
     tab.add("Fourth",new myPanel("Fourth"));
     tab.addChangeListener(new ChangeTab());
     getContentPane().add(tab,BorderLayout.CENTER);
     setVisible(true);
     for(int i=0;i<tab.getTabCount();i++){
          if(i != tab.getSelectedIndex())
            tab.setBackgroundAt(i,Color.orange);
            tab.setForeground(Color.BLACK);
     }
     tab.setOpaque(true);
     UIManager.put("TabbedPane.contentAreaColor ",ColorUIResource.GREEN);
     UIManager.put("TabbedPane.selected",ColorUIResource.GREEN);
     UIManager.put("TabbedPane.background",ColorUIResource.GREEN);
     UIManager.put("TabbedPane.shadow",ColorUIResource.GREEN);
  }

  public static void main(String[] args) {
    Main main = new Main();
  }

  class ChangeTab implements ChangeListener{
    public void stateChanged(ChangeEvent e){
        tab.validate();
        System.out.println(tab.getSelectedIndex());
        for(int i=0;i<tab.getTabCount();i++){
          if(i != tab.getSelectedIndex())
            tab.setBackgroundAt(i,Color.orange);
        }

    }
  }

  class myPanel extends JPanel{
    public myPanel(String str){
       add(new JLabel(str));
    }
  }

}
6
задан Peter Lang 22 January 2010 в 21:40
поделиться

3 ответа

Я использовал ваш пример код, а для меня проработал звонки в uimanager.put () до точки, где они будут выполнены до того, как был выполнен до того, как конструктор JTabbedPane был выполнен.

public class Main extends JFrame {
    JTabbedPane tab;

    public Main() {
       // ... other stuff
       UIManager.put("TabbedPane.contentAreaColor ",ColorUIResource.GREEN);
       UIManager.put("TabbedPane.selected",ColorUIResource.GREEN);
       UIManager.put("TabbedPane.background",ColorUIResource.GREEN);
       UIManager.put("TabbedPane.shadow",ColorUIResource.GREEN);

       // now construct the tabbed pane
       tab=new JTabbedPane();

       // ... other stuff
 }

Есть также некоторые другие доступные свойства (для металла L & F, по меньшей мере):

UIManager.put("TabbedPane.borderColor", Color.RED);
UIManager.put("TabbedPane.darkShadow", ColorUIResource.RED);
UIManager.put("TabbedPane.light", ColorUIResource.RED);
UIManager.put("TabbedPane.highlight", ColorUIResource.RED);
UIManager.put("TabbedPane.focus", ColorUIResource.RED);
UIManager.put("TabbedPane.unselectedBackground", ColorUIResource.RED);
UIManager.put("TabbedPane.selectHighlight", ColorUIResource.RED);
UIManager.put("TabbedPane.tabAreaBackground", ColorUIResource.RED);
UIManager.put("TabbedPane.borderHightlightColor", ColorUIResource.RED);

Это позволит вам контролировать большинство цветов в области вкладки.

Я нашел с этими настройками, все еще была очень маленькая серая синяя серая граница. Я искал, как установить этот цвет безрезультатно. Единственное решение, которое я мог найти, чтобы избавиться от этого, было:

UIManager.put("TabbedPane.contentBorderInsets", new Insets(0, 0, 0, 0));

, который является подактивным решением.

9
ответ дан 9 December 2019 в 22:34
поделиться

Проверьте результаты с этими значениями.

UIManager.put("TabbedPane.contentAreaColor", Color.GREEN);
UIManager.put("TabbedPane.light", ColorUIResource.GREEN);
UIManager.put("TabbedPane.highlight", ColorUIResource.GREEN);
UIManager.put("TabbedPane.shadow", ColorUIResource.GREEN);
UIManager.put("TabbedPane.darkShadow", ColorUIResource.GREEN);
UIManager.put("TabbedPane.selected", ColorUIResource.GREEN);
UIManager.put("TabbedPane.borderHightlightColor", ColorUIResource.GREEN);

Как вы можете видеть, единственный путь, чтобы получить темную границу сверху панели, цвет, который вы хотите, - это установить «BorderHightLightColor» на нужный цвет. К сожалению, это имеет побочные эффекты, которые можно увидеть (зеленая граница вокруг всех вкладок). И еще есть эта серая линия между зелеными, которые приходят с фона.

Я думаю, что единственное реальное решение для этого - переопределить ваш металлотабровайпануй. Если вы устанавливаете только ContentareAcolor и сделать пустые переопределения для методов

paintContentBorderTopEdge(g, tabPlacement, selectedIndex, x, y, w, h);
paintContentBorderLeftEdge(g, tabPlacement, selectedIndex, x, y, w, h); 
paintContentBorderBottomEdge(g, tabPlacement, selectedIndex, x, y, w, h);
paintContentBorderRightEdge(g, tabPlacement, selectedIndex, x, y, w, h); 

. Результат должен находиться рядом с тем, что я подозреваю, вы хотите получить.

2
ответ дан 9 December 2019 в 22:34
поделиться

Попытка 2: Я исправил свою пограничную проблему и изменил взгляд и чувствую себя менеджером. Это все еще не совсем то, что вы ищете, хотя ..

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.event.*; 
import javax.swing.plaf.ColorUIResource; 
public class Main extends JFrame { 
  JTabbedPane tab=new JTabbedPane(); 
  public Main() { 

     setBackground(Color.white);
     setSize(300,300); 
     setTitle("Test Tab pane"); 
     tab.add("First",new myPanel("First")); 
     tab.add("Second",new myPanel("Second")); 
     tab.add("Third",new myPanel("Third")); 
     tab.add("Fourth",new myPanel("Fourth")); 
     tab.addChangeListener(new ChangeTab()); 
     tab.setBackground(Color.white);
     tab.setForeground(Color.black);
     tab.setBorder(BorderFactory.createEmptyBorder());


     getContentPane().add(tab,BorderLayout.CENTER); 
     setVisible(true); 

  } 

  public static void main (String[] args) throws Exception { 
                           UIManager.setLookAndFeel(
            UIManager.getSystemLookAndFeelClassName());
    Main main = new Main(); 
  } 

  class ChangeTab implements ChangeListener{ 
    public void stateChanged(ChangeEvent e){ 
        tab.validate(); 
        System.out.println(tab.getSelectedIndex()); 

    } 
  } 

  class myPanel extends JPanel{ 
    public myPanel(String str){ 
       setBackground(Color.white); 
       setBorder(BorderFactory.createEmptyBorder());
       add(new JLabel(str)); 
    } 
  } 

} 
0
ответ дан 9 December 2019 в 22:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: