我需要为填字游戏构建网格线。我想知道是否可以在创建 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 调整大小时,它们不会调整组件的大小,它们是增强或维护的皇家女巫,放置在滚动 Pane 中时它们完全失败,在所有平台或与原始分辨率不同的屏幕分辨率上查看时,它们看起来非常糟糕.
但更重要的是,我的建议是不要绘制网格线。相反,请考虑使用包含 GridLayout 的 JPanel,您可以将其水平和垂直间隙设置为 1,如果要显示网格线,则将背景设置为黑色,然后使用接受单个字符的 JLabels 或 JTextFields 填充它。
关于java - 在我创建 JPanel 的同一部分绘制网格线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29292400/