2011-12-22 7 views
4

JToolbarにJButtonを追加すると、そのボタンは特定の外観になります(Jpanelに追加した場合と同じではありません)。 JToolbarに似たコンポーネントをいくつか作成しましたが、同じ動作が必要です。 問題:追加されたコンポーネントの外観を変更するための特定のコードを見つけるためにJToolbarクラスをチェックしました(コンポーネント固有のペイントメソッドやUIデリゲートの変更など)。私は何も見つかりませんでした!私はJToolbarの仕組みを理解していません。 誰でも私の説明を教えてもらえますか?Java Swing:JToolbarがボタンの外観を変える方法は?

どうもありがとう、

エルベ・ギヨーム

答えて

4

これはMetalButtonUIクラスのupdate()方法によって処理されるように表示されます。ここでJDK5_07からのコードは次のとおりです。

public void update(Graphics g, JComponent c) { 
    AbstractButton button = (AbstractButton)c; 
    if ((c.getBackground() instanceof UIResource) && 
       button.isContentAreaFilled() && c.isEnabled()) { 
     ButtonModel model = button.getModel(); 
     if (!MetalUtils.isToolBarButton(c)) { 
      if (!model.isArmed() && !model.isPressed() && 
        MetalUtils.drawGradient(
        c, g, "Button.gradient", 0, 0, c.getWidth(), 
        c.getHeight(), true)) { 
       paint(g, c); 
       return; 
      } 
     } 
     else if (model.isRollover() && MetalUtils.drawGradient(
        c, g, "Button.gradient", 0, 0, c.getWidth(), 
        c.getHeight(), true)) { 
      paint(g, c); 
      return; 
     } 
    } 
    super.update(g, c); 
} 

親コンテナがJToolBarのであればisToolBarButton()方法はちょうどチェックし、私は一つの解決策は、常にJToolBarのにあなたのJButtonを追加し、あなたの本当のコンテナにツールバーを追加することであると思います。

それ以外の場合は、独自のカスタムUIを作成してupdate()メソッドをオーバーライドする必要があります。

+0

すてきなコード、ありがとう、+1 – mKorbel

+0

Ok thx!それはまさに私が必要なものです! JToolBarにmyJButtonを追加しようとします。 – paranoia25

1

私はそれが無効ボタンが、何もないと思います。あなたがあなたのボタンを無効にするならば、それはtoolBarの中のものに似ています(黒のテキストカラーを除く)。無効化されたボタンのテキストの色を変更するには、UIManagerのデフォルトプロパティをオーバーライドします。また、toolBarのようにボタンの作業を行うようにするには、mouseListenerをmouseBarに追加し、mouseEnterメソッドとExitメソッドでenableステータスを変更します。

例:

JFrame frame = new JFrame("tool bar button demo"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(150, 150); 
    frame.setLayout(new FlowLayout()); 

    JToolBar bar = new JToolBar(); 
    bar.add(new JButton("A button")); 
    frame.add(bar); 

    // to make text black in disabled button. 
    UIManager.getDefaults().put("Button.disabledText",Color.BLACK); 

    JButton button = new JButton("A button"); 
    button.setEnabled(false); 
    // if you are setting true or not changing the roll over property 
    // of toolBar then following listerner help to give similar effect 
    button.addMouseListener(new MouseListener() { 
     @Override 
     public void mouseReleased(MouseEvent me) { 
     } 
     @Override 
     public void mousePressed(MouseEvent me) { 
     } 
     @Override 
     public void mouseExited(MouseEvent me) { 
      ((JButton)me.getSource()).setEnabled(false); 
     } 
     @Override 
     public void mouseEntered(MouseEvent me) { 
      ((JButton)me.getSource()).setEnabled(true); 
     } 
     @Override 
     public void mouseClicked(MouseEvent me) { 
     } 
    }); 
    frame.add(button); 

    frame.setVisible(true); 
+0

Thx!しかし、私の質問は、JToolbarがボタンの外観を自動で管理する方法です。私は私のカスタムウィジェットのために同じことを実装したいと思います。 – paranoia25

関連する問題