我需要为填字游戏建立网格线。我想知道是否可以在创建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填充。

08-18 16:58