2012-04-20 2 views
2

Я создал игру с змеей и лестницей, и она хорошо работает, но теперь я хочу добавить к ней небольшую модификацию. Я хочу, чтобы у каждого игрока было две части/игроки вместо одного. Новое правило теперь становится, две части одного и того же игрока могут занимать один и тот же квадрат, поэтому мне нужен способ показать их в одном квадрате. Я использовал JLable для определения каждого квадрата, но теперь я хочу, чтобы каждый квадрат удерживал более одной части. То есть, если квадрат занят более чем одной частью, пользователь должен иметь возможность щелкнуть кусок и выбрать только этот кусок. Есть ли способ разделить квадрат/JLable на несколько квадратов/JLabels? Я не уверен, что JLabel лучше всего использовать здесь ... Любые предложения, пожалуйста ???как поставить JLabel внутри JLabel или разделить JLabel на квадраты

+0

И что вы использовали для квадратов? – maksimov

+0

Что такое ваш Piece/Player, состоящий из, это 'JButton' или снова' JLabel', означающий сказать, какая организация представляет Piece/Player в вашем случае? Хотя вы можете поместить что-нибудь на 'JLabel', в вашем случае вы можете сделать, label.setLayout (новый FlowLayout (FlowLayout.LEFT)), а затем добавить свою часть в' JLabel', которая будет работать хорошо, я думаю. –

+0

Я использую Jlabel для квадратов, и я помещаю кусок/плеер внутри JLable, используя JLableObject.setIcon (новый ImageIcon (imgIcon)); –

ответ

3

Вы также можете создать пользовательскую метку и нарисовать каждого пользователя как квадрат.

5

Вот попробуйте этот пример кода, будет это делать для вашего случая:

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(); 
      } 
     }); 
    } 
} 

Вот результат того же:

TWO PLAYERS

Другой способ добиться этого:

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

ok, большое спасибо. Я попробую ваши предложения и посмотрю, работает ли это. Я вернусь к вам, но из-за ее взгляда, чего я хочу. –

+0

@LeeRooy: Я надеюсь, что эта вещь хорошо работает для вашей ситуации, просто узнала об этом в один прекрасный день, что это возможно, задал вопрос о том же, и BINGO, на следующий день я ответил на ваш вопрос :-) И для остальное вы МОЖЕТ ДОБРО ПОЖАЛОВАТЬ И СОХРАНЯТЬ СМОТРЕТЬ :-) –

Смежные вопросы