Я создал игру с змеей и лестницей, и она хорошо работает, но теперь я хочу добавить к ней небольшую модификацию. Я хочу, чтобы у каждого игрока было две части/игроки вместо одного. Новое правило теперь становится, две части одного и того же игрока могут занимать один и тот же квадрат, поэтому мне нужен способ показать их в одном квадрате. Я использовал JLable для определения каждого квадрата, но теперь я хочу, чтобы каждый квадрат удерживал более одной части. То есть, если квадрат занят более чем одной частью, пользователь должен иметь возможность щелкнуть кусок и выбрать только этот кусок. Есть ли способ разделить квадрат/JLable на несколько квадратов/JLabels? Я не уверен, что JLabel лучше всего использовать здесь ... Любые предложения, пожалуйста ???как поставить JLabel внутри JLabel или разделить JLabel на квадраты
ответ
Вы также можете создать пользовательскую метку и нарисовать каждого пользователя как квадрат.
Вот попробуйте этот пример кода, будет это делать для вашего случая:
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();
}
});
}
}
Выход:
ok, большое спасибо. Я попробую ваши предложения и посмотрю, работает ли это. Я вернусь к вам, но из-за ее взгляда, чего я хочу. –
@LeeRooy: Я надеюсь, что эта вещь хорошо работает для вашей ситуации, просто узнала об этом в один прекрасный день, что это возможно, задал вопрос о том же, и BINGO, на следующий день я ответил на ваш вопрос :-) И для остальное вы МОЖЕТ ДОБРО ПОЖАЛОВАТЬ И СОХРАНЯТЬ СМОТРЕТЬ :-) –
- 1. JLabel с другим JLabel
- 2. Как поставить JButton на JLabel?
- 3. JLabel поверх другого JLabel
- 4. как поставить JLabel центр JPanel
- 5. Перетаскивание JLabel поверх другого JLabel
- 6. Отображение JLabel перед другим JLabel
- 7. Центрированный JLabel внутри JTable
- 8. Дисплей JLabel внутри JTable
- 9. Ввод JLabel поверх JLabel в Java
- 10. JLabel над другим JLabel не работает
- 11. JLabel позиционирование
- 12. Позиционирование JLabel на JPanel
- 13. Как вставить JPanel внутри JLabel?
- 14. Зеркалирование JLabel или JTextArea
- 15. как положить JLabel внутри прямоугольника
- 16. JLabel + фото
- 17. Перетащите JLabel при сохранении оригинала JLabel
- 18. Показать JLabel частично поверх другого JLabel
- 19. Перезагрузка JFrame или JLabel
- 20. Добавление изображения и JLabel в новый JLabel
- 21. Paint JLabel выше другого JLabel без JLayeredPane
- 22. Пользовательский класс JLabel разбивает положение JLabel
- 23. Создание границы вокруг ImageIcon на JLabel, а не вокруг JLabel
- 24. Как обновить JLabel при обновлении JLabel в другом классе?
- 25. Управление JLabel
- 26. JList с 3 JLabel внутри
- 27. Модификация JLabel
- 28. JLabel исчезает
- 29. изменение jlabel
- 30. Показаны JLabel
И что вы использовали для квадратов? – maksimov
Что такое ваш Piece/Player, состоящий из, это 'JButton' или снова' JLabel', означающий сказать, какая организация представляет Piece/Player в вашем случае? Хотя вы можете поместить что-нибудь на 'JLabel', в вашем случае вы можете сделать, label.setLayout (новый FlowLayout (FlowLayout.LEFT)), а затем добавить свою часть в' JLabel', которая будет работать хорошо, я думаю. –
Я использую Jlabel для квадратов, и я помещаю кусок/плеер внутри JLable, используя JLableObject.setIcon (новый ImageIcon (imgIcon)); –