1

我在框架顶部放置三个不同的面板时遇到了真正的麻烦,因为我需要在每个面板上具有不同的布局。我似乎无法让它工作,我已经连续尝试了 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);   
}
4

2 回答 2

5

有几件事:

1)您多次添加摆动组件不会复制它 - 它将被删除并添加到新位置。所以这:

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)我确信你之前提出的一些问题有可以接受的答案,或者你自己想出了一个可以接受的答案。您可以奖励那些提供帮助的人,或者您可以提供您找到的答案并接受它。那么更多的人会花时间为你提供一个好的答案。这对你更好,对我们更好,对和你有同样问题的随机人更好。

于 2012-11-26T21:54:22.487 回答
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.
于 2012-11-26T18:57:10.980 回答