首页 > 解决方案 > 如何在 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));
}

标签: javaswing

解决方案


按照要求。下面的代码只是显示您想要的 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());
    }
}

这是它的样子:

Futoshiki 拼图板


推荐阅读