Java Позиционирование списка в графическом интерфейсе

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

Кто-нибудь может подсказать, как это сделать? Вот код (примечание: очень новый для Java и графического интерфейса)

protected static void createAndShowGUI() {
        GUI predict = new GUI();
        JFrame frame = new JFrame("Phone V1.0");

        frame.setContentPane(predict.createContentPane());

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setMinimumSize(new Dimension(300, 400));
        frame.setVisible(true); // Otherwise invisible window
}

private JPanel createContentPane() {
    JPanel pane = new JPanel();

    TextArea = new JTextArea(5, 10);
    TextArea.setEditable(false);
    TextArea.setLineWrap(true);
    TextArea.setWrapStyleWord(true);
    TextArea.setWrapStyleWord(true);
    pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS)); 
    //Adds the buttons from Top     to Bottom

    String[] items = {"dsfsdfd"};
    list = new JList(items);
    JScrollPane scrollingList = new JScrollPane(list);
    int orient = list.getLayoutOrientation();

    JPanel window = new JPanel();
    pane.add(window);

    JPanel buttonPanel = new JPanel();
    buttonPanel.setLayout(new GridLayout(5, 3));

    JButton[] buttons = new JButton[] {
        new JButton("Yes"),
        new JButton(""),
        new JButton("Clr"),
        new JButton("1"),
        new JButton("2abc"),
        new JButton("3def"),
        new JButton("4ghi"),
        new JButton("5jkl"),
        new JButton("6mno"),
        new JButton("7pqrs"),
        new JButton("8tuv"),
        new JButton("9wxyz"),
        new JButton("*+"),
        new JButton("0_"),
        new JButton("^#")
    };  // Array Initialiser

    for (int i = 0; i < buttons.length; i++) {
        buttonPanel.add(buttons[i]);
        buttons[i].addActionListener(this);
    }
    pane.add(TextArea);
    pane.add(list);
    pane.add(buttonPanel);


    return pane;
}

person user330572    schedule 03.05.2010    source источник


Ответы (5)


Прочтите раздел руководства Swing по Использование диспетчера макетов. Нет необходимости использовать только один менеджер компоновки. Вы можете вкладывать менеджеры компоновки, чтобы получить желаемый эффект.

person camickr    schedule 03.05.2010

Поместите TextArea и list в новую панель с BorderLayout менеджер. По сути, менеджер BorderLayout позволяет размещать компоненты, используя координаты севера, юга, востока, запада и центра. Компоненты в центре занимают все доступное пространство, так как в родительском контейнере доступно больше места.

private JPanel createContentPane() {
    JPanel pane = new JPanel();  //this is your main panel
    JPanel textAreaPanel = new JPanel(new BorderLayout()); //the wrapper

    //Some more code...

    //Then at the end
    //Make your TextArea take the center
    textAreaPanel.add(TextArea, BorderLayout.CENTER);
    //And the list to the east
    textAreaPanel.add(list, BorderLayout.EAST);
    pane.add(textAreaPanel);
    pane.add(buttonPanel);

    return pane;
}

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

Кстати, попробуйте следовать соглашениям об именах Java. Вместо JTextArea TextArea используйте JTextArea textArea. Это облегчает вам и людям, читающим ваш код, его понимание.

person Cesar    schedule 03.05.2010

Вы можете использовать менеджер компоновки, такой как Mig Layout, для такого позиционирования.

alt text
(источник: miglayout.com )

person VonC    schedule 03.05.2010

Я могу порекомендовать вам FormLayout. Прежде чем я нашел этот макет, у меня была настоящая боль с GridBagLayout. FormLayout более мощный и гораздо более удобный для изучения и использования, и он бесплатный. Дай этому шанс.

person wax    schedule 03.05.2010

Как предлагали другие, ознакомьтесь с концепцией менеджеров макетов. Есть несколько, которые поставляются со стандартным API Swing, и несколько хороших сторонних API.

Кроме того, вы захотите добавить JList в область прокрутки (JScrollPane). Возможно, вы захотите рассмотреть добавление его на разделенную панель (JSplitPane). И под рассмотрите я не имею в виду «сделайте это, потому что так сказал какой-то парень в сети», я имею в виду «сделайте это, если это имеет смысл для ваших конечных пользователей».

person Avrom    schedule 04.05.2010