我需要为填字游戏建立网格线。我想知道是否可以在创建JPanel及其属性的同一部分中执行此操作,而不是在方法中执行该操作?
class CrosswordWindow extends JFrame {
public JPanel crossPanel;
public CrosswordWindow() {
super("Crossword");
setLayout(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
/*
bunch of buttons, labels, JLists etc.
*/
int size;
crossPanel = new JPanel();
crossPanel.setBounds(240, 40, 680, 360);
crossPanel.setBackground(Color.white);
crossPanel.setBorder(BorderFactory.createEtchedBorder(1, Color.lightGray, Color.lightGray));
add(crossPanel);
我在尝试为填字游戏绘制网格线时遇到了困难。
最佳答案
首先,请不要执行以下操作:setLayout(null);
。虽然null布局和setBounds()
似乎是Swing新手喜欢的创建复杂GUI的最简单和最佳方法,但您创建的Swing GUI越多,使用它们时就会遇到的困难就越大。当GUI调整大小时,它们不会调整组件的大小;它们是要增强或维护的皇家女巫;放置在滚动窗格中时,它们会完全失败;在所有平台或与原始分辨率不同的屏幕分辨率下查看时,它们看起来都是令人毛骨悚然的。
但更重要的是,我的建议是不要绘制网格线。可以考虑使用一个拥有GridLayout的JPanel,将其水平和垂直间隙设置为1,如果要显示网格线,则将背景设置为黑色,然后用接受一个字符的JLabel或JTextField填充。