0

JPanel を別の JPanel 内に表示しようとしています。現在、JPanel は外部 JFrame にあり、他の JFrame でロードされます。プログラムが 2 つの異なるウィンドウを開かないように、JPanel を他の JPanel 内に配置したい。

ここに写真があります:

写真

メインのゲーム フレーム内に必要なテキスト ログを含む小さな JPanel。パネルにパネルを追加してみましたpanel.add(othePanel)。私はそれをJFrameに追加しようとしましたframe.add(otherPanel). 他のすべてを上書きし、黒い背景を与えるだけです。

パネルを追加、サイズ変更、移動するにはどうすればよいですか?

編集:

それが私がチャットボックスになりたい場所です。

それが私がチャットボックスになりたい場所です。

クラスコード:

クラスのトップに残されました。

public static JPanel panel;
public static JTextArea textArea = new JTextArea(5, 30);
public static JTextField userInputField = new JTextField(30);

public static void write(String message) {
    Chatbox.textArea.append("[Game]: " + message + "\n");
    Chatbox.textArea.setCaretPosition(Chatbox.textArea.getDocument()
            .getLength());
    Chatbox.userInputField.setText("");
}

public Chatbox() {
    panel = new JPanel();
    panel.setPreferredSize(new Dimension(220, 40));
    panel.setBackground(Color.BLACK);

    JScrollPane scrollPane = new JScrollPane(textArea);
    scrollPane.setPreferredSize(new Dimension(380, 100));
    textArea.setLineWrap(true);
    textArea.setWrapStyleWord(true);
    textArea.setEditable(false);
    scrollPane
            .setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    userInputField.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent event) {
            String fromUser = userInputField.getText();
            if (fromUser != null) {
                textArea.append(Frame.username + ":" + fromUser + "\n");
                textArea.setCaretPosition(textArea.getDocument()
                        .getLength());
                userInputField.setText("");
            }
        }
    });
    panel.add(userInputField, SwingConstants.CENTER);
    panel.add(scrollPane, SwingConstants.CENTER);

    //JFrame frame = new JFrame();
    //frame.add(panel);
    //frame.setSize(400, 170);
    //frame.setVisible(true);
}

本体クラス:

    public Frame() {
    frame.getContentPane().remove(loginPanel);
    frame.repaint();

    String capName = capitalizeString(Frame.username);
    name = new JLabel(capName);

    new EnemyHealth("enemyhealth10.png");
    new Health("health10.png");
    new LoadRedCharacter("goingdown.gif");
    new Spellbook();
    new LoadMobs();
    new LoadItems();
    new Background();
    new Inventory();
    new ChatboxInterface();

    frame.setBackground(Color.black);
    Frame.redHealthLabel.setFont(new Font("Serif", Font.PLAIN, 20));
    ticks.setFont(new Font("Serif", Font.PLAIN, 20));
    ticks.setForeground(Color.yellow);
    Frame.redHealthLabel.setForeground(Color.black);

    // Inventory slots
    panel.add(slot1);

    panel.add(name);

    name.setFont(new Font("Serif", Font.PLAIN, 20));
    name.setForeground(Color.white);

    panel.add(enemyHealthLabel);
    panel.add(redHealthLabel);
    panel.add(fireSpellBookLabel);
    panel.add(iceSpellBookLabel);
    panel.add(spiderLabel);
    panel.add(appleLabel);
    panel.add(fireMagicLabel);
    panel.add(swordLabel);

    // Character
    panel.add(redCharacterLabel);

    // Interface
    panel.add(inventoryLabel);
    panel.add(chatboxLabel);

    // Background
    panel.add(backgroundLabel);

    frame.setContentPane(panel);
    frame.getContentPane().invalidate();
    frame.getContentPane().validate();
    frame.getContentPane().repaint();

      //I WOULD LIKE THE LOADING OF THE PANEL SOMEWHERE IN THIS CONSTRUCTOR.

    new ResetEntities();
    frame.repaint();

    panel.setLayout(null);
    Run.loadKeyListener();

    Player.px = Connect.x;
    Player.py = Connect.y;

    new Mouse();

    TextualMenu.rect = new Rectangle(Frame.inventoryLabel.getX() + 80,
            Frame.inventoryLabel.getY() + 100,
            Frame.inventoryLabel.getWidth(),
            Frame.inventoryLabel.getHeight());

    Player.startMessage();
}
4

2 に答える 2

5

静的変数を使用しないでください。

null レイアウトは使用しないでください。

適切なレイアウト マネージャーを使用します。おそらく、メイン パネルは BorderLayout を使用します。次に、メイン コンポーネントを CENTER に追加し、2 番目のパネルを EAST に追加します。2 番目のパネルも BorderLayout を使用できます。その後、必要に応じて 2 つのコンポーネントを NORTH、CENTER、または SOUTH に追加できます。

于 2013-05-09T15:29:00.307 に答える