我建立一個小型的國際象棋棋盤的戰術中心保持元件尺寸,這將是一個有趣的方式來對利益(編程和國際象棋)反思。與緩衝區
一個問題我目前面臨,雖然解決了,被保持的1的板寬比:1。
的Board
延伸JPanel
。由於約束問題,我選擇維持棋盤的物理尺寸而不是渲染尺寸。這會在實際使用時導致更快的操作。
我想要什麼它看起來像,並取得了:
我實現這雖然看起來很hackish的並且是雙向飛碟標準代碼差的方式(謝謝基於雙向飛碟)。
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);
}
如上所示,我手動設置電路板的尺寸和位置。即使我已經詳盡地指出,這不應該做,但我找不到工作的解決方案。我需要電路板來填充最大可能區域,但仍保持寬高比。
如果有,你可以提供什麼建議(代碼或概念),我真的很感謝您抽出寶貴的時間來幫助我解決這個難題精英。
如果您的主板開出的角球被定義爲任何寬度分鐘|高度,然後我沒有看到你的代碼的任何問題。 – TwoThe
@TwoThe'雖然沒有佈局管理器是可以做到的,但如果可能的話,您應該使用佈局管理器。'我所做的是不使用佈局管理器。雖然我使用了邊界佈局,但是通過使用'null'佈局,這些方法可以實現相同的結果。因此這是不好的代碼。 – Obicere