我在将三个不同的面板放在框架顶部时遇到了麻烦,因为我需要在每个面板上放置不同的布局。我似乎无法让它工作,我已经连续4天尝试了。我无法在此代码中找到我出错的地方。
我这是最好的方式吗?任何想法或帮助将不胜感激!!!!!
我的代码:
public Mem() {
super("3 panels on 1 frame");
JFrame frame = new JFrame();
setSize(500, 500);
setDefaultCloseOperation(EXIT_ON_CLOSE);
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
JPanel p3 = new JPanel();
//Adding three different panels with borderlayout
frame.setLayout(new BorderLayout());
//Panel 1 is the Player Panel with labels
JLabel ply1 = new JLabel("Player 1");
JLabel ply2 = new JLabel("Player 2");
JLabel ply3 = new JLabel("Player 3");
JLabel ply4 = new JLabel("Player 4");
p1.add(ply1); p1.add(ply2); p1.add(ply3); p1.add(ply4);
//Panel 2 is the game panel with playingcards on it. (Clickable buttons)
JButton card1 = new JButton("Card");
p2.add(card1); p2.add(card1); p2.add(card1); p2.add(card1); p2.add(card1); p2.add(card1); p2.add(card1);
p2.add(card1); p2.add(card1); p2.add(card1); p2.add(card1); p2.add(card1); p2.add(card1); p2.add(card1);
//Panel 3 is the lower panel with the buttons new game & close on it.
JButton newGame = new JButton("New Game");
newGame.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
startGame();
}
});
JButton endGame = new JButton("Close");
endGame.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
closeGame();
}
});
p3.add(newGame);
p3.add(endGame);
frame.add(p1, BorderLayout.EAST);
frame.add(p2, BorderLayout.CENTER);
frame.add(p3, BorderLayout.SOUTH);
setVisible(true);
}
答案 0 :(得分:5)
有一些事情:
1)您多次添加swing组件不会复制它 - 它将被删除并添加到新位置。所以这个:
JButton card1 = new JButton("Card");
p2.add(card1); p2.add(card1); p2.add(card1); p2.add(card1); p2.add(card1); p2.add(card1); p2.add(card1);
p2.add(card1); p2.add(card1); p2.add(card1); p2.add(card1); p2.add(card1); p2.add(card1); p2.add(card1);
与此相同:
JButton card1 = new JButton("Card");
p2.add(card1);
2)您的课程似乎延伸JFrame
。如果是,请删除对JFrame frame = new JFrame();
的所有引用。通过使用frame
变量,您将创建一个框架,您正在添加面板但不显示。因此,无论您在何处看到frame.
都将其删除。
示例:
frame.setLayout(new BorderLayout());
变为
setLayout(new BorderLayout());
3)我确定您之前提出的一些问题已经得到了可接受的答案,或者您自己想出了一个可接受的答案。您可以奖励那些人帮助,或者您可以提供您找到的答案并接受。然后会有更多人花时间为您提供一个好的答案。这对你来说更好,对我们来说更好,对于那个和你一样问题的随机人来说更好。
答案 1 :(得分:4)
您似乎正在将您的面板附加到JFrame
,而这些Mem
永远不会显示在JFrame frame = new JFrame();
框架构造函数中。您可以删除或评论该行:
add(p1, BorderLayout.EAST);
add(p2, BorderLayout.CENTER);
add(p3, BorderLayout.SOUTH);
并使用:
p1.setLayout(new GridLayout(2, 2));
// etc.
然后,您将能够看到面板中如何为您应用的任何布局排列组件:
{{1}}