大家好,我有一点问题。我创建了一个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
}
}
答案 0 :(得分:3)
您没有正确使用布局。使用组件向 CardLayout 添加组件时使用String常量,而不是使用 FlowLayout 组件。并且String常量在 add方法中的组件之后。请阅读布局管理器教程,因为这里的解释非常好。看起来你正在使用不应该使用的CardLayout,这就是为什么你只看到一个组件。换句话说,你的程序正在使用完全低音的布局。
换句话说,使用CardLayout的容器一次只能显示一个组件,这意味着,因为cardPanel使用CardLayout,它只能显示一个组件,这里twoName可能是唯一的东西显示在它上面。