4

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

どうもありがとう、

エルベギヨーム

4

2 に答える 2

4

これは、クラスのupdate()メソッドによって処理されるようです。MetalButtonUIJDK5_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);
}

このisToolBarButton()メソッドは、親 Container が JToolBar であるかどうかをチェックするだけなので、1 つの解決策は、常に JButton を JToolBar に追加してから、ツールバーを実際の Container に追加することだと思います。

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

于 2011-12-22T16:49:29.697 に答える
1

無効化ボタンに過ぎないと思います。ボタンを無効にすると、ツールバーのボタンと同じように見えます (黒いテキストの色を除く)。無効なボタンのテキストの色を変更するには、UIManager のデフォルト プロパティをオーバーライドできます。また、toolBar のようにボタンが機能する可能性を高めるには、mouseListener を追加し、mouseEnter および Exit メソッドで有効ステータスを変更します。

例:

    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);
于 2011-12-22T12:29:08.643 に答える