2012-05-24 46 views
0

我想知道是否有人可以想出解決以下佈局問題的方法,我使用Nimbus外觀。當使用Nimbus外觀時,JButton在JToolBar中不可見

問題在於工具欄中的按鈕不可見,因爲JToolBar佈局管理器沒有正確計算出JTextField的寬度。 Metal外觀似乎並沒有表現出這個錯誤。

import java.awt.*; 
import javax.swing.*; 

public class TextFieldTest extends JFrame 
{ 
    public TextFieldTest() 
    { 
     // Create the text field 
     JTextField textField = new JTextField(20) 
     { 
      @Override 
      public Dimension getMaximumSize() 
      { 
       return super.getPreferredSize(); 
      } 
     }; 

     // Create the tool bar 
     JToolBar toolBar = new JToolBar(); 
     toolBar.add(textField); 
     toolBar.add(Box.createHorizontalGlue()); 
     toolBar.add(new JButton("Button")); 

     // Layout the frame 
     getContentPane().setLayout(new BorderLayout()); 
     getContentPane().add(toolBar, BorderLayout.NORTH); 
     setPreferredSize(new Dimension(800, 600)); 
     pack(); 
    } 

    public static void main(String[] args) 
    { 
     SwingUtilities.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       TextFieldTest test = new TextFieldTest(); 
       test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       test.setVisible(true); 
      } 
     }); 
    } 
} 

任何建議表示讚賞。

+0

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7171632 – lifelongcoug

回答

2

雨雲中JToolBar的默認佈局是:

class javax.swing.plaf.synth.SynthToolBarUI$SynthToolBarLayoutManager 

你應該設置:

toolBar.setLayout(new BoxLayout(toolBar, BoxLayout.X_AXIS)); 
+0

這種方法唯一的問題是(1)工具欄句柄消失(當其可浮動時),(2)當工具欄被拖動到垂直位置時,您還必須交換到Y_AXIS。但由於我的工具欄不可浮動,所以不會影響我。感謝您的解決方法。 – lifelongcoug