Java Позиционирование списка в графическом интерфейсе - PullRequest
1 голос
/ 03 мая 2010

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

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

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

Ответы [ 5 ]

2 голосов
/ 04 мая 2010

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

1 голос
/ 04 мая 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. Вам и людям, читающим ваш код, легче понять его.

1 голос
/ 03 мая 2010

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

альтернативный текст http://www.miglayout.com/images/Form.png

0 голосов
/ 04 мая 2010

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

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

0 голосов
/ 03 мая 2010

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

...