Вставка JToolbar влево и вправо

Я создал компонент JToolbar и добавил его во фрейм. Панель инструментов использует BorderLayout.

Я добавляю три кнопки на панель инструментов, и они отображаются очень хорошо, за исключением того, что я хочу, чтобы они были добавлены с правой стороны панели инструментов. Выровняйте по правому краю.

Затем всякий раз, когда я добавляю другие кнопки на панель инструментов, я хочу, чтобы они добавлялись слева.

Как я могу это сделать?

Я сделал следующее, но происходит то, что кнопки появляются в верхней части друг друга:S Три справа расположены все друг друга, а два слева все друг друга.

public class Toolbar extends JToolBar {

    private JToggleButton Screenshot = null;
    private JToggleButton UserKeyInput = null;
    private JToggleButton UserMouseInput = null;
    private CardPanel cardPanel = null;

    public Toolbar() {
        setFloatable(false);
        setRollover(true);
        setLayout(new BorderLayout());

        //I want to add these three to the right side of my toolbar.. Right align them :l
        Screenshot = new JToggleButton(new ImageIcon());
        UserKeyInput = new JToggleButton(new ImageIcon());
        UserMouseInput = new JToggleButton(new ImageIcon());
        cardPanel = new CardPanel();

        add(Screenshot, BorderLayout.EAST);
        add(UserKeyInput, BorderLayout.EAST);
        add(UserMouseInput, BorderLayout.EAST);
        addListeners();
    }

    public void addButtonLeft() {        
        JButton Tab = new JButton("Game");
        Tab.setFocusable(false);
        Tab.setSize(50, 25);

        Tab.setActionCommand(String.valueOf(Global.getApplet().getCanvas().getClass().hashCode()));
        Tab.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                cardPanel.jumpTo(Integer.valueOf(e.getActionCommand()));
            }
        });

        add(Tab, BorderLayout.WEST);
    }
}

2 ответа

Решение

Они на вершине друг друга, потому что вы помещаете их все в те же два места, а именно BorderLayout.EAST а также BorderLayout.WEST,

Вы можете достичь желаемого эффекта без использования BorderLayout но вместо этого используя JToolBarмакет по умолчанию.

 add(tab);
 // add other elements you want on the left side 

 add(Box.createHorizontalGlue());

 add(Screenshot);
 add(UserKeyInput);
 add(UserMouseInput);
 //everything added after you place the HorizontalGlue will appear on the right side

РЕДАКТИРОВАТЬ (на основе вашего комментария):

Создайте новый JPanel и добавьте его на панель инструментов перед клеем:

 JPanel leftPanel = new JPanel();
 add(leftPanel);

 add(Box.createHorizontalGlue());

 add(Screenshot);
 add(UserKeyInput);
 add(UserMouseInput);

Тогда ваш addButtonLeft() Метод добавления новых кнопок на панель, а не непосредственно на панель инструментов.

Каждый, у кого есть похожая проблема, может взглянуть на http://helpdesk.objects.com.au/java/right-align-component-in-a-jtoolbar. Это очень простой пример использования горизонтального клея, который избавляет от необходимости изменения макета по умолчанию.

Это строки кода, скопированные из ссылки выше:

JToolBar toolbar = new JToolBar();

// These buttons will be left aligned by default
toolbar.add(new JButton("Open"));
toolbar.add(new JButton("Save"));

// add some glue so subsequent items are pushed to the right
toolbar.add(Box.createHorizontalGlue());

// This Help button will be right aligned
toolbar.add(new JButton("Help"));
Другие вопросы по тегам