1

大家好,我对此有点问题。我创建了一个 JPanel 并向其中添加了组件,然后将 JPanel 添加到容器中。现在,当我从 main 调用这个类时,会弹出一个窗口,但它只显示 JPanel 的第一个组件。为什么它只显示第一项而不是全部?谢谢。

注意:此代码不完整,我只是想弄清楚为什么我的组件在继续其他事情之前没有显示,请解决组件问题。

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.*;
import javax.swing.*;


public class Player extends JFrame implements ActionListener
{
       private CardLayout playerCard;
       private JPanel cardPanel;
       public String player1;
       public String player2;

      // Constructor:
      public Player()
      {

        setTitle("Game");
        setSize(300,200);
        setLocation(10,200); 
        Container contentPane = getContentPane();
        contentPane.setLayout(new FlowLayout());

                //set up the panel
        cardPanel = new JPanel();
        playerCard = new CardLayout();
        cardPanel.setLayout(playerCard);

                //get player one name
        JLabel p1Name = new JLabel("Player 1 Name:");
        JTextField oneName = new JTextField();

                //get the name for player 2
        JLabel p2Name = new JLabel("Player 2 Name:");
        JTextField twoName = new JTextField();

                //the button to start the game
        JButton start = new JButton("Start");

        //add the components << Why is only the first component shown??
        cardPanel.add(start);
        cardPanel.add(p1Name);
        cardPanel.add(oneName);
        cardPanel.add(p2Name);
        cardPanel.add(twoName);

        contentPane.add("startCard",cardPanel);
        }

    @Override
    public void actionPerformed(ActionEvent arg0) 
    {
        // TODO Auto-generated method stub

    } 
}
4

1 回答 1

3

您没有正确使用布局。在使用组件向CardLayout添加组件时使用 String 常量,而不是使用组件的FlowLayout。并且 String 常量在 add 方法中的组件之后。请阅读布局管理器教程,因为那里已经很好地解释了这一切。看起来您在不应该使用的地方使用 CardLayout,这就是为什么您只看到一个组件的原因。换句话说,您的程序完全使用低音布局。

换句话说,使用 CardLayout 的容器一次只能显示一个组件,也就是说,由于 cardPanel 使用 CardLayout,它只能显示一个组件,这里的 twoName 可能是唯一显示的内容。

于 2013-04-04T00:19:25.537 回答