我正在为战术构建一个小棋盘,这将是一种反思兴趣(编程和国际象棋)的有趣方式。
我目前面临的一个问题虽然已解决,但仍是保持 1:1 的板长宽比。
Board
延伸JPanel
。_ 由于约束问题,我选择保持电路板的物理尺寸而不是渲染尺寸。这将导致实际使用时更快的操作。
我希望它看起来像什么,并实现了:
我实现这一点的方式虽然看起来很老套,而且按照 Skeet 标准来说是糟糕的代码(谢谢基于 Skeet)。
public Frame() {
final JFrame frame = new JFrame("Chess");
final JPanel content = new JPanel(new BorderLayout());
final JPanel boardConfine = new JPanel(new BorderLayout());
final Board board = new Board();
boardConfine.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
int min = Math.min(boardConfine.getWidth(), boardConfine.getHeight());
int xBuffer = (boardConfine.getWidth() - min) / 2;
int yBuffer = (boardConfine.getHeight() - min) / 2;
board.setBounds(xBuffer, yBuffer, min, min);
}
});
boardConfine.add(board, BorderLayout.CENTER);
content.setBackground(new Color(205, 205, 205));
content.add(boardConfine, BorderLayout.CENTER);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setContentPane(content);
frame.pack();
frame.setVisible(true);
}
如上所示,我手动设置了电路板的大小和位置。即使我已经详尽地声明过这不应该这样做,但我找不到工作的解决方案。我需要电路板填充最大可能的区域,但保持纵横比。
如果您可以提供任何建议(代码或概念),我非常感谢您抽出时间帮助我解决这个精英难题。