java - 如何在 Java 中使用 JPanel 创建 Futoshiki GUI?
问题描述
我目前正在为 Futoshiki 游戏开发我的 GUI。我已经设法用数字方块显示板。但是,我想知道如何实现具有大于和小于符号的关系方块。非常感谢您的帮助。
这就是我的 GUI 现在的样子。
这是我的代码...
public FutoshikiGUI()
{
int row, col;
grid = new JPanel(new GridLayout(5,5));
cells = new PanelCell[5+1][5+1];
for (row=1; row<=5; row++)
{
for (col=1; col<=5; col++)
{
cells[row][col] = new PanelCell(this,row,col);
grid.add(cells[row][col]);
}
}
setLayout(new BorderLayout());
add(grid, BorderLayout.NORTH);
}
public PanelCell(FutoshikiGUI p, int r, int c)
{
if (p == null)
throw new FutoshikiException("cannot have null panel");
if ((r<1) || (r>5))
throw new FutoshikiException("invalid row (" + r + ")");
if ((c<1) || (c>5))
throw new FutoshikiException("invalid col (" + c + ")");
panel = p;
row = r;
col = c;
setHorizontalAlignment(CENTER);
setMargin(new Insets(5,5,5,5));
setForeground(Color.black);
setFont(font);
setPreferredSize(new Dimension(75,75));
}
解决方案
按照要求。下面的代码只是显示您想要的 Futoshiki 拼图板。
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Futoshiki implements Runnable {
@Override
public void run() {
showGui();
}
private JPanel createGrid() {
JPanel panel = new JPanel(new GridLayout(0, 9));
// First row
panel.add(new JButton("4"));
panel.add(createColorButton("", Color.white, null));
panel.add(new JButton());
panel.add(createColorButton("", Color.white, null));
panel.add(new JButton("2"));
panel.add(createColorButton("", Color.white, null));
panel.add(new JButton());
panel.add(createColorButton("\u25B6", Color.white, Color.gray));
panel.add(new JButton());
// Second row
panel.add(createColorButton("", Color.white, null));
panel.add(createColorButton("", Color.darkGray, null));
panel.add(createColorButton("", Color.white, null));
panel.add(createColorButton("", Color.darkGray, null));
panel.add(createColorButton("", Color.white, null));
panel.add(createColorButton("", Color.darkGray, null));
panel.add(createColorButton("", Color.white, null));
panel.add(createColorButton("", Color.darkGray, null));
panel.add(createColorButton("", Color.white, null));
// Third row
panel.add(new JButton());
panel.add(createColorButton("", Color.white, null));
panel.add(new JButton());
panel.add(createColorButton("", Color.white, null));
panel.add(new JButton());
panel.add(createColorButton("\u25B6", Color.white, Color.gray));
panel.add(new JButton());
panel.add(createColorButton("", Color.white, null));
panel.add(new JButton());
// Fourth row
panel.add(createColorButton("", Color.white, null));
panel.add(createColorButton("", Color.darkGray, null));
panel.add(createColorButton("", Color.white, null));
panel.add(createColorButton("", Color.darkGray, null));
panel.add(createColorButton("\u25B2", Color.white, Color.gray));
panel.add(createColorButton("", Color.darkGray, null));
panel.add(createColorButton("", Color.white, null));
panel.add(createColorButton("", Color.darkGray, null));
panel.add(createColorButton("\u25B2", Color.white, Color.gray));
// Fifth row
panel.add(new JButton());
panel.add(createColorButton("", Color.white, null));
panel.add(new JButton());
panel.add(createColorButton("", Color.white, null));
panel.add(new JButton());
panel.add(createColorButton("", Color.white, null));
panel.add(new JButton());
panel.add(createColorButton("", Color.white, null));
panel.add(new JButton());
// Sixth row
panel.add(createColorButton("\u25B2", Color.white, Color.gray));
panel.add(createColorButton("", Color.darkGray, null));
panel.add(createColorButton("", Color.white, null));
panel.add(createColorButton("", Color.darkGray, null));
panel.add(createColorButton("", Color.white, null));
panel.add(createColorButton("", Color.darkGray, null));
panel.add(createColorButton("", Color.white, null));
panel.add(createColorButton("", Color.darkGray, null));
panel.add(createColorButton("", Color.white, null));
// Seventh row
panel.add(new JButton());
panel.add(createColorButton("", Color.white, null));
panel.add(new JButton());
panel.add(createColorButton("\u25C0", Color.white, Color.gray));
panel.add(new JButton());
panel.add(createColorButton("", Color.white, null));
panel.add(new JButton());
panel.add(createColorButton("\u25B6", Color.white, Color.gray));
panel.add(new JButton());
// Eighth row
panel.add(createColorButton("", Color.white, null));
panel.add(createColorButton("", Color.darkGray, null));
panel.add(createColorButton("\u25BC", Color.white, Color.gray));
panel.add(createColorButton("", Color.darkGray, null));
panel.add(createColorButton("", Color.white, null));
panel.add(createColorButton("", Color.darkGray, null));
panel.add(createColorButton("", Color.white, null));
panel.add(createColorButton("", Color.darkGray, null));
panel.add(createColorButton("", Color.white, null));
// Last row
panel.add(new JButton());
panel.add(createColorButton("", Color.white, null));
panel.add(new JButton());
panel.add(createColorButton("", Color.white, null));
panel.add(new JButton());
panel.add(createColorButton("", Color.white, null));
panel.add(new JButton());
panel.add(createColorButton("", Color.white, null));
panel.add(new JButton());
return panel;
}
private JButton createColorButton(String text, Color bg, Color fg) {
JButton button = new JButton(text);
if (bg != null) {
button.setBackground(bg);
}
if (fg != null) {
button.setForeground(fg);
}
return button;
}
private void showGui() {
JFrame frame = new JFrame("Futoshiki");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(createGrid(), BorderLayout.CENTER);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Futoshiki());
}
}
这是它的样子:
推荐阅读
- image - 修改 Docker 镜像并保存,以免再次构建容器时丢失内容。如何?
- vb.net - 文本输入框中只允许某些值
- html - 将元素插入 flexbox 时的 CSS 过渡,无需添加/删除 CSS 类
- javascript - JavaScript 警报在 Symfony Twig 中不起作用
- python - 我的不和谐机器人的命令除了 1 之外不起作用
- r - 为什么 gamlss() 预测超出响应范围?
- azure - 如何使用 AD 凭据装载 Azure 文件?
- python - Python加载txt文件并按行中的位置拆分行
- time-series - 基于非等距时间序列输入的 RNN 预测
- azure - 在 Azure 文件服务 REST Api 上调用创建文件