2013-04-26 4 views
2

Я создал компонент JToolbar и добавил его к кадру. На панели инструментов используется BorderLayout.Вкладка JToolbar влево и вправо

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

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

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

я сделал следующее, но случается, что кнопки появляются на верхней части друг друга: 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); 
    } 
} 
+1

Вы образец кода будет более полезным, если бы это было [SSCCE] (http://sscce.org/), то мы могли бы работать это и сразу увидеть вашу проблему. –

ответ

10

Они на вершине друг друга, потому что вы ставите их всех в те же два места, а именно: 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 

EDIT (основанный на ваш комментарий):

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

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

add(Box.createHorizontalGlue()); 

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

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

+0

Хм, но что, если я хочу идти справа налево, а не слева направо. Причина, по которой я спрашиваю, состоит в том, что три кнопки выше, которые я хотел, справа, потом все, что осталось, слева. – Brandon

+0

Почему вы не можете просто добавить их выше, где вы создаете клей? – drewmoore

+0

Поскольку addButtonLeft создает их динамически. – Brandon

1

У всех, имеющих аналогичную проблему, можно посмотреть 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")); 
Смежные вопросы