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);
    }
}

person Brandon    schedule 26.04.2013    source источник
comment
Ваш пример кода был бы полезнее, если бы это был SSCCE, тогда мы могли бы запустить его и сразу увидеть вашу проблему.   -  person Duncan Jones    schedule 26.04.2013


Ответы (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() добавляет новые кнопки на панель, а не непосредственно на панель инструментов.

person drew moore    schedule 26.04.2013
comment
Хм, а что, если я хочу идти справа налево, а не слева направо. Причина, по которой я спрашиваю, заключается в том, что три кнопки выше, которые я хотел, были справа, а после этого - слева. - person Brandon; 26.04.2013
comment
Почему вы не можете просто добавить их выше, где вы создаете клей? - person drew moore; 26.04.2013
comment
Потому что addButtonLeft создает их динамически. - person Brandon; 26.04.2013

Каждый, у кого есть похожая проблема, может взглянуть на 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"));
person DanD    schedule 20.07.2017