java – JPanel周围的数字; JPanel边界?
发布时间:2020-12-15 02:12:29 所属栏目:Java 来源:网络整理
导读:我正在创建一个迷你游戏而且我被卡住了.这个网格应该是nxn,但在这种情况下它是6×6,直到我解决了问题. 无论如何,我想创建一个透明的边框 这将在每个单元格上方添加居中数字(在左侧和上方,但是,稍后我必须添加权限侧和向下).这样做有什么好办法?我四处搜寻,
我正在创建一个迷你游戏而且我被卡住了.这个网格应该是nxn,但在这种情况下它是6×6,直到我解决了问题.
无论如何,我想创建一个透明的边框 这将在每个单元格上方添加居中数字(在左侧和上方,但是,稍后我必须添加权限侧和向下).这样做有什么好办法?我四处搜寻,因为我知道国际象棋棋盘有这种“边界”,我实际上搜查了它们,但没有运气. 这是一个代码片段,单元格包含在一个简单的JPanel中,而其他所有内容都在JFrame中. public GameFrame() { EventQueue.invokeLater(new Runnable() { public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { } JFrame frame = new JFrame("Game"); frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new BorderLayout()); frame.add(new GamePanel()); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); JMenuBar menubar = new JMenuBar(); JMenu menu1 = new JMenu ("New"); menubar.add(menu1); JMenu menu2 = new JMenu ("Load"); menubar.add(menu2); JMenu menu3 = new JMenu ("Save"); menubar.add(menu3); JMenu menu4 = new JMenu ("Size"); menubar.add(menu4); JMenu menu5 = new JMenu ("Check"); menubar.add(menu5); JMenu menu6 = new JMenu ("Solve"); menubar.add(menu6); frame.setJMenuBar(menubar); } }); } public class GamePanel extends JPanel { public GamePanel() { setLayout(new GridBagLayout()); GridBagConstraints gbc = new GridBagConstraints(); for (int row = 0; row < 6; row++) { for (int col = 0; col < 6; col++) { gbc.gridx = col; gbc.gridy = row; CellPanel cellPanel = new CellPanel(); Border border = null; if (row < 5) { if (col < 5) { border = new MatteBorder(1,1,Color.GRAY); } else { border = new MatteBorder(1,Color.GRAY); } } else { if (col < 5) { border = new MatteBorder(1,Color.GRAY); } } cellPanel.setBorder(border); add(cellPanel,gbc); } } } } public class CellPanel extends JPanel { Color defaultBackground; public CellPanel() { addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { defaultBackground = getBackground(); if (getBackground().equals(Color.BLUE)) { setBackground(null); } else { setBackground(Color.BLUE); } } }); } public Dimension getPreferredSize() { return new Dimension(50,50); } } 解决方法
也许尝试在gridbaglayout中添加一个额外的列和行.然后在for()构造中将它们作为特殊情况控制或在1处启动索引,然后返回并在for()构造之外解决它们.
创建另一个可以用作CellLabel的继承JPanel,特别是如果它们看起来都相似的话. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |