Как я могу выровнять одну кнопку вправо в JToolbar? - PullRequest
0 голосов
/ 20 апреля 2019

У меня есть панель инструментов, и мне нужно поместить ряд кнопок и джаблей слева от экрана, но одну из кнопок справа.Я не могу сделать последний шаг вправо.

this.panelControl=new JToolBar();

setLayout(new FlowLayout(FlowLayout.LEFT)); //i use it to move them to the left, probably wrong
panelControl.add(load);
panelControl.addSeparator();
panelControl.add(laws);
panelControl.addSeparator();
panelControl.add(play);
panelControl.add(stop);
panelControl.add(labelSteps);
panelControl.add(steps);
panelControl.add(labelTime);
panelControl.add(time);
panelControl.add(exit); // i need this to be in the right side, but i can't

this.add(panelControl);

Большое спасибо заранее.

1 Ответ

0 голосов
/ 20 апреля 2019

Используйте собственный макет JToolBar, но добавьте горизонтальный клей между двумя последними кнопками.Это раскроет вещи для вас.Например:

enter image description here

import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.*;

@SuppressWarnings("serial")
public class BoxLayoutEg extends JPanel {
    public BoxLayoutEg() {
        String[] btnTexts = {"One", "Two", "Three", "Four", "Five", "Exit"};

        JToolBar toolBar = new JToolBar();
        for (int i = 0; i < btnTexts.length; i++) {
            JButton button = new JButton(btnTexts[i]);
            if (i != btnTexts.length - 1) {
                toolBar.add(button);
                toolBar.addSeparator();
            } else {
                toolBar.add(Box.createHorizontalGlue());
                toolBar.add(button);
            }
        }

        setLayout(new BorderLayout());
        add(toolBar, BorderLayout.PAGE_START);

        setPreferredSize(new Dimension(400, 300));

    }

    private static void createAndShowGui() {
        BoxLayoutEg mainPanel = new BoxLayoutEg();

        JFrame frame = new JFrame("BoxLayout Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(mainPanel);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> createAndShowGui());
    }
}

Согласно комментарию VGR:

Лучше использовать createGlue (), поэтомурастянутая компоновка сохраняется даже в том случае, если JToolBar является плавающим, а затем перемещается и повторно устанавливается вертикально пользователем.

и он прав.Поэтому измените это:

} else {
    toolBar.add(Box.createHorizontalGlue());
    toolBar.add(button);
}

на следующее:

} else {
    toolBar.add(Box.createGlue());
    toolBar.add(button);
}

, чтобы разделение сохранялось, даже если панель инструментов находится в вертикальном положении

Также обратите внимание, что есливам нужно ограничить размер JTextField, вы можете установить его максимальный размер равным предпочтительному размеру, например,

} else {
    int columns = 10;
    JTextField time = new JTextField(columns);
    time.setMaximumSize(time.getPreferredSize());
    toolBar.add(time);
    toolBar.add(Box.createHorizontalGlue());
    toolBar.add(button);
}
...