私は戦術用の小さなチェス盤を作っています。これは興味 (プログラミングとチェス) について考えるのに楽しい方法です。
私が現在直面している問題の 1 つは、ボードのアスペクト比を 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);
}
上記のように、ボードのサイズと位置を手動で設定しました。私でさえ、これを行うべきではないと徹底的に述べてきましたが、うまくいく解決策を見つけることができませんでした。アスペクト比を維持しながら、可能な限り最大の領域を埋めるボードが必要です。
提供できる提案 (コードまたは概念のいずれか) があれば、このエリート主義の難問を解決するために時間を割いてくれて本当に感謝しています。