2

ねえ (: このフォーラムでヘルプを求めるのはこれが初めてなので、すべてが正しく行われていることを願っています

さて、私の問題は、赤でマークしたものです。私のJPanelは、BoxLayout.Y_AXIS方向のBoxlayoutを使用しています。それは正しい選択ではないと思います。JPanel (オンライン ユーザー)、JSeperator、および他の JPanel (管理者) を互いに分離させたくありません。私はそれらをお互いの真下に積み重ねたい。

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

誰かがその接着剤を適切に使用する方法を教えてくれるか、これを行う良い方法を教えてくれることを願っています (:

4

2 に答える 2

2

編集:答えに変更:

パネルは互いに重なり合っています。問題は、2 つの JPanel を保持するコンテナーでどのようなレイアウトが使用されているかということです。また、多くのユーザーを表示することを行っていますか? そこに JList または JTable が必要ですか? GUIをどのように見せたいかの写真を見せて、典型的な数のユーザーがいるときにそれを見せてもらえますか. SSCCEの作成と投稿も検討してください。これには少し手間がかかりますが、それだけの価値はあります。

編集 1:
画像をさらに確認する際に、列見出しとして「オンライン ユーザー」と「ミュート」を使用して、ここで JTable を使用することをお勧めします。 Jテーブル。それを JScrollPane に入れて、現在表示している場所に表示します。

于 2011-09-18T13:29:54.093 に答える
2

2 つのパネルを boxlayout に追加した後、

add(Box.createVerticalGlue());

これにより、これら 2 つのパネルが適切なサイズに縮小され、その下にスペースが配置されます。

于 2011-09-18T13:30:24.683 に答える