如何在JFrame中实现支持自定义格子数的棋盘格绘制方法
解决方案
核心实现思路是将格子数定义为mypanel类的成员变量,通过构造方法传入参数赋值,重写方法直接读取类内成员变量即可,无需修改方法签名。另外Swing自定义绘制建议重写paintComponent方法而非paint方法,避免子控件绘制异常问题。
修改后mypanel类代码
package com.example; import javax.swing.*; import java.awt.*; // 修正原代码缺失的class关键字 public class mypanel extends JPanel { // 定义成员变量存储格子数 private int noofchecks; // 带参构造方法,接收格子数参数 public mypanel(int noofchecks) { this.noofchecks = noofchecks; } // 改用paintComponent做自定义绘制 @Override protected void paintComponent(Graphics g) { super.paintComponent(g); for (int j = 0; j < noofchecks; j++) { for (int i = 0; i < noofchecks; i++) { if (j % 2 == 0) { g.setColor(i % 2 == 0 ? Color.white : Color.black); } else { g.setColor(i % 2 == 0 ? Color.black : Color.white); } g.fillRect(5 + (i * 20), 5 + (j * 20), 20, 20); } } } public void makerect(Graphics g) { } }
修改后example类load方法
只需在实例化mypanel时传入格子数参数即可:
public void load(int noofchecks) { int x = (noofchecks * 20) + 30; int y = x + 30; setSize(x, y); // 传入格子数参数 mypanel panel = new mypanel(noofchecks); panel.setBackground(Color.white); add(panel); }
如果后续需要动态修改棋盘格子数,可给mypanel新增setter方法,调用setNoofchecks()后执行repaint()即可刷新界面。
内容的提问来源于stack exchange,提问作者Sannan Yousuf
相关产品推荐
相关产品推荐

