2012-04-20 6 views
2

私はヘビとラダーゲームを作成しましたが、うまくいきましたが、少し変更を加えたいと思います。私は各プレイヤーに1つの代わりに2つのピース/プレイヤーを持たせたい。今度は新しいルールが登場し、同じプレーヤーの2つの部分が同じ広場を占めることができるので、同じ広場にそれらを表示する方法が必要です。 私はJLableを使って各四角形を識別しましたが、今は各四角形に複数のピースを保持させたいと思います。つまり、四角形が複数のピースによって占められている場合、ユーザーはピースをクリックしてそのピースのみを選択できる必要があります。四角形/ JLableを複数の四角形/ JLabelsに分割する方法はありますか? JLabelがここで使用するのがベストかどうか分かりません... 何か提案してください???JLabelをJLabelの中に入れたり、JLabelを四角形に分割する方法

+0

何を正方形に使用しましたか? – maksimov

+0

あなたのPiece/Playerは正確には何か、「JButton」か「JLabel」ですか、どのエンティティがPiece/Playerをあなたのケースで表すのかを意味しますか?あなたが 'JLabel'に何かを置くことはできますが、あなたの場合は、' label.setLayout(FlowLayout.LEFT));を実行し、あなたの作品を 'JLabel'に追加してください。 –

+0

私はJlabelを四角形に使用しています.JLableObject.setIcon(newImIcon)を使用してJLable内にピース/プレーヤを配置します。 –

答えて

3

カスタムラベルを作成し、各ユーザーを四角形として描画することもできます。ここで

5

これはあなたのケースのために行います、このコード例を試してみてください。

TWO PLAYERS

これを達成するための別の方法は次のとおりです:

ここ
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class LabelOverLabel 
{ 
    public static final String HTML = 
     "<html>" + 
     "<style type'text/css'>" + 
     "body, html { padding: 0px; margin: 0px; }" + 
     "</style>" + 
     "<body>" + 
     "<img src='http://pscode.org/media/starzoom-thumb.gif'" + 
     " width=320 height=240>" + 
     ""; 

    private static final String PLAYERONE = 
     "<html>" + 
     "<style type'text/css'>" + 
     "body, html { padding: 0px; margin: 0px; }" + 
     "</style>" + 
     "<body>" + 
     "<img src='http://pscode.org/media/citymorn2.jpg'" + 
     " width=160 height=120>" + 
     ""; 

    private static final String PLAYERTWO = 
     "<html>" + 
     "<style type'text/css'>" + 
     "body, html { padding: 0px; margin: 0px; }" + 
     "</style>" + 
     "<body>" + 
     "<img src='http://pscode.org/media/citymorn1.jpg'" + 
     " width=160 height=120>" + 
     ""; 

    private JLabel playerOneLabel; 
    private JLabel playerTwoLabel; 

    private void createAndDisplayGUI() 
    { 
     JFrame frame = new JFrame("JLabel Over JLabel"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 

     final JLabel bottomLabel = new JLabel(HTML); 
     bottomLabel.setLayout(new FlowLayout(FlowLayout.LEFT, 2, 2)); 

     playerOneLabel = new JLabel(PLAYERONE); 
     bottomLabel.add(playerOneLabel); 

     JButton insertPlayer = new JButton("INSERT"); 
     insertPlayer.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent ae) 
      { 
       playerTwoLabel = new JLabel(PLAYERTWO); 
       bottomLabel.add(playerTwoLabel); 
       bottomLabel.revalidate(); 
       bottomLabel.repaint(); 
      } 
     }); 

     frame.getContentPane().add(bottomLabel, BorderLayout.CENTER); 
     frame.getContentPane().add(insertPlayer, BorderLayout.PAGE_END); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String... args) 
    { 
     SwingUtilities.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       new LabelOverLabel().createAndDisplayGUI(); 
      } 
     }); 
    } 
} 

が同じの出力であります
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class LabelOverLabel 
{ 
    private JLabel playerOneLabel; 
    private JLabel playerTwoLabel; 
    private Icon[] icons = {UIManager.getIcon("OptionPane.informationIcon"), 
          UIManager.getIcon("OptionPane.errorIcon"), 
          UIManager.getIcon("OptionPane.warningIcon")}; 

    private void createAndDisplayGUI() 
    { 
     JFrame frame = new JFrame("JLabel Over JLabel"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 

     final JLabel bottomLabel = new JLabel("I am a JLabel"); 
     bottomLabel.setBorder(BorderFactory.createLineBorder(Color.BLUE.darker(), 5)); 
     //bottomLabel.setIcon(icons[0]); 
     bottomLabel.setLayout(new FlowLayout(FlowLayout.LEFT, 2, 2)); 

     playerOneLabel = new JLabel(); 
     playerOneLabel.setIcon(icons[1]); 
     bottomLabel.add(playerOneLabel); 

     JLabel secondLabel = new JLabel("1"); 
     bottomLabel.add(secondLabel); 

     JButton insertPlayer = new JButton("INSERT"); 
     insertPlayer.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent ae) 
      { 
       playerTwoLabel = new JLabel(); 
       playerTwoLabel.setIcon(icons[2]); 
       bottomLabel.add(playerTwoLabel); 
       bottomLabel.revalidate(); 
       bottomLabel.repaint(); 
      } 
     }); 

     frame.getContentPane().add(bottomLabel, BorderLayout.CENTER); 
     frame.getContentPane().add(insertPlayer, BorderLayout.PAGE_END); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String... args) 
    { 
     SwingUtilities.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       new LabelOverLabel().createAndDisplayGUI(); 
      } 
     }); 
    } 
} 

出力:

JLABEL OVER JLABEL

+0

大変ありがとうございます。私はあなたの提案を試み、それが機能するかどうかを見ます。私はあなたに戻ってきますが、それの見た目から、私が望むものです。 –

+0

@LeeRooy:この事はあなたの状況でうまくいくことを願って、ちょうど1日後にそれを学んで、このことが可能で、同じことについて質問しました。そしてビンゴ、私はあなたの質問に答えました:-)そして残りの部分は大歓迎です。 –