Boxlayout растянуть мои Jpanels - PullRequest
       23

Boxlayout растянуть мои Jpanels

2 голосов
/ 18 сентября 2011

Привет (: Я впервые обращаюсь за помощью на этом форуме, поэтому надеюсь, что я все сделал правильно

Хорошо, моя проблема в том, что я пометил красным. Мой JPanel использует Boxlayout с BoxLayout.Y_AXISориентация. Я думаю, что это неправильный выбор. Я не хочу, чтобы мой JPanel (онлайн-пользователи), мой JSeperator и мой другой JPanel (admin) были отделены друг от друга. Я хочу, чтобы они складывались непосредственно под друг друга.

Рисунок GUI: http://dl.dropbox.com/u/10049103/notcool.png

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

Вот код для помеченной JPanel (не знаю, если нужно):

package Client;

import Server.User;
import java.awt.BorderLayout;
import java.util.HashMap;
import java.util.Iterator;
import javax.swing.BoxLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSeparator;

/**
 *
 * @author Sune
 */
public class OnlineUsersPanel extends JPanel {
private UserWindow owner; public void setOwner(UserWindow uw) { owner = uw; }
private HashMap<String, ShowUserPanel> userPanels = new HashMap<String, ShowUserPanel>();

public OnlineUsersPanel() {
    this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
    this.add(addStart());
    this.add(new JSeparator());
    System.out.println("OnlineUsersPanel con called");
}

void addUser(User user) {
    ShowUserPanel newPanel = new ShowUserPanel(owner, user.getUserName());
    userPanels.put(user.getUserName(), newPanel);
    this.add(newPanel);
    owner.updateGUI();
}

void deleteUser(User user) {
    ShowUserPanel toRemove;

    for (Iterator i = userPanels.keySet().iterator(); i.hasNext();) {
        String tempUserName = (String) i.next();
        if (tempUserName.equals(user.getUserName())) {
            toRemove = userPanels.remove(tempUserName);
            this.remove(toRemove);
            System.out.println("Fundet og fjernet");
            break;
        }
    }
}

private JPanel addStart() {
    JPanel p = new JPanel();
    p.setLayout(new BorderLayout());
    p.add(new JLabel("Online Users:"), BorderLayout.LINE_START);
    p.add(new JLabel("mute:"), BorderLayout.LINE_END);
    return p;
}

Я надеюсь, что кто-то может научить меня, как правильно использовать этот клей, или подскажет, как это сделать (:

Ответы [ 2 ]

2 голосов
/ 18 сентября 2011

после добавления двух панелей в раскладку сделайте

add(Box.createVerticalGlue());

это уменьшит эти две панели до их предпочтительных размеров и оставит пространство под ними.

2 голосов
/ 18 сентября 2011

Редактировать: изменено на ответ:

Панели расположены прямо друг над другом.Вопрос в том, какую компоновку использует контейнер, содержащий два JPanels?Также вы делаете для отображения многих пользователей?Вам нужен JList или JTable там?Можете ли вы показать изображение того, как вы хотите, чтобы интерфейс выглядел, и показать его, когда есть типичное количество пользователей.Также рассмотрите возможность создания и публикации SSCCE .Это займет немного работы с вашей стороны, но оно того стоит.

Редактировать 1:
При дальнейшем рассмотрении вашего изображения я предлагаю вам использовать JTableздесь с «Online Users» и «Mute» в качестве заголовков столбцов и с материалом, который вы сейчас показываете ниже, Admin и флажок в виде строки JTable.Поместите его в JScrollPane и отобразите там, где вы сейчас его отображаете.

...