0

複数をJToolbar含む がありますJPanels(それぞれに特定の境界線を設定したいので必要です)。JPanels残念ながら、ルック アンド フィール マネージャーはをツールバーに属するものとして認識しないJButtonsため、レンダラーは通常のボタンとして認識されます (つまり、ツールバーに特別なマウス オーバー効果がありません)。

LAFレンダラーが特別な背景を与えるため、JPanelsbyを置き換えることはできません。JToolbars

他のオプション/ヒントはありますか?

4

1 に答える 1

1

以下に示すように、ツールバーのレイアウトを変更し、必要に応じてコンポーネントを追加できます。任意の数のツールバーを持つこともできます。L&F コンボをここに示しますaddSeparator()のメソッドはJToolBarL&F 固有の を提供することに注意してくださいJToolBar.Separator

テスト画像

import component.Laf;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JToolBar;

/**
 * @see https://stackoverflow.com/a/16121288/230513
 */
public class JToolBarTest {

    private void display() {
        JFrame f = new JFrame("Test");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLayout(new BoxLayout(f.getContentPane(), BoxLayout.Y_AXIS));
        // https://stackoverflow.com/a/11949899/230513
        f.add(Laf.createToolBar(f));
        f.add(createBar());
        f.add(createBar());
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    private JToolBar createBar() {
        JToolBar toolBar = new JToolBar();
        toolBar.add(createPanel());
        toolBar.addSeparator();
        toolBar.add(createPanel());
        return toolBar;
    }

    private JPanel createPanel() {
        JPanel panel = new JPanel();
        panel.setBorder(BorderFactory.createTitledBorder("Panel"));
        Action buttonAction = new AbstractAction("Button"){

            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println(e.getActionCommand()
                    + " " + e.getSource().hashCode());
            }
        };
        panel.add(new JButton(buttonAction));
        panel.add(new JButton(buttonAction));
        return panel;
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new JToolBarTest().display();
            }
        });
    }
}
于 2013-04-20T14:14:09.950 に答える