2012-08-14 93 views
4

我已经在Java Swing中创建了一个应用程序。我提供了从菜单中更改应用程序的外观和风格的选项,但是在JTabbedPane中添加了新选项卡之后,它没有得到新的外观和感觉。外观在Swing中不会更新JTabbedPane

我已经使用这个代码:

Window windows[] = Frame.getWindows(); 
for(Window window : windows) { 
    SwingUtilities.updateComponentTreeUI(window); 
} 
+4

为了更好地帮助越早,张贴[SSCCE(http://sscce.org/)。 – 2012-08-14 06:05:26

+0

你能告诉我们一些更多的代码,也许是添加你的Jtabbedpane的代码? – Kostronor 2012-08-14 06:05:56

+2

您是否设定了新的外观?听起来很明显,但有时显而易见的东西会丢失:D'UIManager.setLookAndFeel(lnfName);' – zip 2012-08-14 06:07:19

回答

7

凭借@安德鲁example和这个老thing,它似乎为我工作。

enter image description here

import java.awt.BorderLayout; 
import java.awt.Component; 
import java.awt.EventQueue; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.ArrayList; 
import java.util.List; 
import javax.swing.Box; 
import javax.swing.BoxLayout; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JTabbedPane; 
import javax.swing.JTextArea; 
import javax.swing.JTextField; 
import javax.swing.JToolBar; 
import javax.swing.SwingUtilities; 
import javax.swing.UIManager; 
import javax.swing.UIManager.LookAndFeelInfo; 

/** 
* @see https://stackoverflow.com/a/11949899/230513 
* @see https://stackoverflow.com/a/5773956/230513 
*/ 
public class JTabbedText { 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      private final JTabbedPane jtp = new JTabbedPane(); 

      @Override 
      public void run() { 
       JFrame f = new JFrame(); 
       f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

       jtp.addTab("Model", createPanel()); 
       jtp.addTab("View", createPanel()); 
       jtp.addTab("Control", createPanel()); 

       f.add(createToolBar(f), BorderLayout.NORTH); 
       f.add(jtp, BorderLayout.CENTER); 
       f.pack(); 
       f.setLocationRelativeTo(null); 
       f.setVisible(true); 
      } 
     }); 
    } 

    private static JToolBar createToolBar(final Component parent) { 
     final UIManager.LookAndFeelInfo[] available = 
      UIManager.getInstalledLookAndFeels(); 
     List<String> names = new ArrayList<String>(); 
     for (LookAndFeelInfo info : available) { 
      names.add(info.getName()); 
     } 
     final JComboBox combo = new JComboBox(names.toArray()); 
     String current = UIManager.getLookAndFeel().getName(); 
     combo.setSelectedItem(current); 
     combo.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent ae) { 
       int index = combo.getSelectedIndex(); 
       try { 
        UIManager.setLookAndFeel(
         available[index].getClassName()); 
        SwingUtilities.updateComponentTreeUI(parent); 
       } catch (Exception e) { 
        e.printStackTrace(System.err); 
       } 
      } 
     }); 
     JToolBar bar = new JToolBar("L&F"); 
     bar.add(combo); 
     return bar; 
    } 

    private static Box createPanel() { 
     Box panel = new Box(BoxLayout.X_AXIS); 
     JLabel label = new JLabel("Code: ", JLabel.LEFT); 
     label.setAlignmentY(JLabel.TOP_ALIGNMENT); 
     JTextArea text = new JTextArea(4, 16); 
     text.setAlignmentY(JTextField.TOP_ALIGNMENT); 
     text.append("#" + panel.hashCode()); 
     text.append("\n#" + label.hashCode()); 
     text.append("\n#" + label.hashCode()); 
     panel.add(label); 
     panel.add(text); 
     return panel; 
    } 
}