2013-04-11 5 views
2

Я делаю несколько экспериментов с субстанцией LAF, и я пытаюсь удалить прокладку между вкладками. С Пользовательский интерфейс по умолчанию я использовал:Удалить содержимое на JTabbedPane в Substance LAF

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

, но это не работает с веществом, по-видимому, чтобы обеспечить его собственные значения. Как достичь такого же эффекта с Веществом.

+0

комментарий by @shemon [о UIManager vs Вещество L & F] (http://stackoverflow.com/a/12406148/714968) – mKorbel

ответ

1
  • это значение не представляется возможным переопределить с помощью UIManager для JTabbedPane,

  • это довольно распространенная проблема, что большинство методов защищены (не имеет значения, если они будут опубликованы в качестве ключей в UIManager) без перекрывая собственные BasicTabbedPaneUI


  • вещество

enter image description here

javax.swing.plaf.InsetsUIResource[top=4,left=4,bottom=4,right=4] 
false 
  • металла (кроссплатформенный)

enter image description here

java.awt.Insets[top=4,left=2,bottom=3,right=3] 
false 
  • венчик

enter image description here

null 
null 

система (Win8 на Java6)

enter image description here

javax.swing.plaf.InsetsUIResource[top=2,left=2,bottom=3,right=3] 
true 
  • не имеет значения, если значение ключа в виде Instets(0,0,0,0) или InsetsUIResource (0 , 0,0,0)

модифицированный код originnaly сделал Кирилл

import java.awt.BorderLayout; 
import java.awt.FlowLayout; 
import java.awt.Insets; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.*; 
import org.pushingpixels.substance.api.DecorationAreaType; 
import org.pushingpixels.substance.api.SubstanceLookAndFeel; 
import org.pushingpixels.substance.api.skin.BusinessBlueSteelSkin; 
import org.pushingpixels.substance.api.skin.OfficeBlack2007Skin; 
import org.pushingpixels.substance.api.skin.OfficeBlue2007Skin; 

/** 
* Test application that shows the use of the 
* {@link SubstanceLookAndFeel#getDecorationType(java.awt.Component)} API called 
* on different components. 
* 
* @author Kirill Grouchnikov 
* @see SubstanceLookAndFeel#getDecorationType(java.awt.Component) 
*/ 
public class GetDecorationType /*extends JFrame*/ { 

    private static final long serialVersionUID = 1L; 
    private static JFrame frame = new JFrame(); 

    /** 
    * Creates the main frame for 
    * <code>this</code> sample. 
    */ 
    public GetDecorationType() { 
     frame.setTitle("Get decoration type"); 
     frame.setLayout(new BorderLayout()); 
     final JTabbedPane tabs = new JTabbedPane(); 
     SubstanceLookAndFeel.setDecorationType(tabs, DecorationAreaType.HEADER); 
     JPanel tab1 = new JPanel(new FlowLayout()); 
     tab1.add(new JTextField("sample")); 
     final JComboBox combo = new JComboBox(new Object[]{"sample"}); 
     tab1.add(combo); 
     SubstanceLookAndFeel.setDecorationType(tab1, DecorationAreaType.GENERAL); 
     JPanel tab2 = new JPanel(new FlowLayout()); 
     tab2.add(new JTextField("sample2")); 
     tab2.add(new JComboBox(new Object[]{"sample2"})); 
     SubstanceLookAndFeel.setDecorationType(tab2, DecorationAreaType.GENERAL); 
     tabs.addTab("tab1", tab1); 
     tabs.addTab("tab2", tab2); 
     frame.add(tabs, BorderLayout.CENTER); 
     JPanel controlPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); 
     JButton getTypes = new JButton("Get types"); 
     getTypes.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       SwingUtilities.invokeLater(new Runnable() { 
        @Override 
        public void run() { 
         DecorationAreaType tabsType = SubstanceLookAndFeel.getDecorationType(tabs); 
         DecorationAreaType comboType = SubstanceLookAndFeel.getDecorationType(combo); 
         JOptionPane.showMessageDialog(frame, "Tabbed pane: " + tabsType.getDisplayName() 
           + "\n" + "Combo box: " + comboType.getDisplayName()); 
        } 
       }); 
      } 
     }); 
     controlPanel.add(getTypes); 
     frame.add(controlPanel, BorderLayout.SOUTH); 
     frame.setSize(400, 200); 
     frame.setLocationRelativeTo(null); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
    } 

    /** 
    * The main method for 
    * <code>this</code> sample. The arguments are ignored. 
    * 
    * @param args Ignored. 
    */ 
    public static void main(String[] args) { 
     JFrame.setDefaultLookAndFeelDecorated(true); 
     JDialog.setDefaultLookAndFeelDecorated(true); 
     try { 
      for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { 
       if ("Nimbus".equals(info.getName())) { 
        UIManager.setLookAndFeel(info.getClassName()); 
        break; 
       } 
      } 
      /*UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());*/ 
     } catch (Exception e) { 
      return; 
     } 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       //SubstanceLookAndFeel.setSkin(new BusinessBlueSteelSkin()); 
       //SubstanceLookAndFeel.setSkin(new OfficeBlack2007Skin()); 
       SubstanceLookAndFeel.setSkin(new OfficeBlue2007Skin()); 
       UIManager.put("TabbedPane.contentOpaque", Boolean.TRUE); 
       System.out.println(UIManager.getDefaults().get("TabbedPane.contentBorderInsets")); 
       System.out.println(UIManager.getDefaults().get("TabbedPane.tabsOverlapBorder")); 
       UIManager.getDefaults().put("TabbedPane.contentBorderInsets", new javax.swing.plaf.InsetsUIResource(0, 0, 0, 0)); 
       UIManager.getDefaults().put("TabbedPane.tabsOverlapBorder", true); 
       SwingUtilities.updateComponentTreeUI(frame); 
       new GetDecorationType()/*.setVisible(true)*/; 
      } 
     }); 
    } 
} 
1

Благодаря информации, поставленной @mKorbel я кладезь, что я могу достичь такой же эфект с помощью установки SubstanceLookAndFeel.TABBED_PANE_CONTENT_BORDER_KIND в SubstanceConstants.TabContentPaneBorderKind.SINGLE_PLACEMENT

http://insubstantial.github.io/insubstantial/substance/docs/clientprops/TabbedPaneContentBorderKind.html

+0

приятно ............. – mKorbel

Смежные вопросы