在这个游戏中使用哪个布局管理器?
恕我直言,使用布局和组件不是一个很好的解决方案,个人而言,我倾向于自定义绘画解决方案.
从一件作品的基本概念开始,它需要知道它的位置,它的大小,它的颜色,能够自己画画,并且可能是可重新定位的,像...
public interface Piece { public Rectangle getBounds(); public Color getColor(); public void setLocation(Point point); public void paint(Graphics2D g2d); }
从这里,你可以定义你需要的形状,例如......
public abstract class AbstractPiece implements Piece { private Rectangle bounds; private Color color; @Override public void setLocation(Point point) { bounds.setLocation(point); } @Override public Rectangle getBounds() { return bounds; } @Override public Color getColor() { return color; } public void setBounds(Rectangle bounds) { this.bounds = bounds; } public void setColor(Color color) { this.color = color; } } public class Square extends AbstractPiece { public Square(Point location, int size, Color color) { Rectangle bounds = new Rectangle(); bounds.setLocation(location); bounds.setSize(size, size); setBounds(bounds); setColor(color); } @Override public void paint(Graphics2D g2d) { g2d.setColor(getColor()); g2d.fill(getBounds()); g2d.setColor(Color.GRAY); Rectangle bounds = getBounds(); g2d.drawLine(bounds.x + (bounds.width / 2), bounds.y, bounds.x + (bounds.width / 2), bounds.y + bounds.height); g2d.drawLine(bounds.x, bounds.y + (bounds.height / 2), bounds.x + bounds.width, bounds.y + (bounds.height / 2)); } }
这只是一个基本的方块,没什么特别的,但是,它是自包含的,易于创建和管理.您可以使用这个简单的模式创建您喜欢的任何形状组合,在一天结束时,您的电路板类将无关紧要,它只需要它占据的空间以及如何绘制它,说到哪个,你需要一些管理所有这些形状的容器类型......
public class PuzzelPane extends JPanel { private Listpieces; public PuzzelPane() { Dimension size = getPreferredSize(); pieces = new ArrayList<>(25); Point location = new Point((size.width - 50) / 2, (size.width - 50) / 2); pieces.add(new Square(location, 50, Color.BLUE)); } @Override public Dimension getPreferredSize() { return new Dimension(200, 200); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); for (Piece piece : pieces) { Graphics2D g2d = (Graphics2D) g.create(); piece.paint(g2d); g2d.dispose(); } } }
这是一个非常简单的概念,它有一个List
维护所有可用的形状,并简单地循环在这个paintComponent
方法中绘制它们
结合此示例和此示例中的想法,您现在可以拖动形状