1

各パネルに異なるレイアウトを設定する必要があるため、フレームの上に 3 つの異なるパネルを配置するのに本当に問題があります。私はそれを機能させることができないようで、現在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 に答える