Java JPanel周围的数字;杰帕内尔边界?
我正在制作一个迷你游戏,我被卡住了。这个网格应该是nxn,但在我弄清楚之前,这个网格是6x6 无论如何,我想创建一个透明的边框 这将在每个单元格上方添加居中的数字(在左侧和上方,但是,稍后我必须添加右侧和下方)。这样做的好方法是什么?我四处搜索,因为我知道棋盘有这样的“边界”,我实际上搜索了它们,但没有运气 这是一个代码片段,单元格包含在一个简单的JPanel中,而其他所有内容都在JFrame中Java JPanel周围的数字;杰帕内尔边界?,java,swing,jpanel,border,Java,Swing,Jpanel,Border,我正在制作一个迷你游戏,我被卡住了。这个网格应该是nxn,但在我弄清楚之前,这个网格是6x6 无论如何,我想创建一个透明的边框 这将在每个单元格上方添加居中的数字(在左侧和上方,但是,稍后我必须添加右侧和下方)。这样做的好方法是什么?我四处搜索,因为我知道棋盘有这样的“边界”,我实际上搜索了它们,但没有运气 这是一个代码片段,单元格包含在一个简单的JPanel中,而其他所有内容都在JFrame中 public GameFrame() { EventQueue.invokeLater(n
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, 0, 0, Color.GRAY);
} else {
border = new MatteBorder(1, 1, 0, 1, Color.GRAY);
}
} else {
if (col < 5) {
border = new MatteBorder(1, 1, 1, 0, Color.GRAY);
} else {
border = new MatteBorder(1, 1, 1, 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);
}
}
公共游戏框架(){
invokeLater(新的Runnable(){
公开募捐{
试一试{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch(ClassNotFoundException |实例化Exception | IllegalacessException
|不受支持的LookandFeelEx){
}
JFrame=新JFrame(“游戏”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(新的BorderLayout());
frame.add(新游戏面板());
frame.pack();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
JMenuBar menubar=新的JMenuBar();
JMenu菜单1=新JMenu(“新”);
菜单栏。添加(菜单1);
JMenu菜单2=新JMenu(“加载”);
菜单栏。添加(菜单2);
JMenu菜单3=新JMenu(“保存”);
菜单栏。添加(菜单3);
JMenu菜单4=新JMenu(“大小”);
菜单栏。添加(菜单4);
JMenu菜单5=新JMenu(“检查”);
菜单栏。添加(菜单5);
JMenu菜单6=新JMenu(“解决”);
菜单栏。添加(菜单6);
frame.setJMenuBar(菜单栏);
}
});
}
公共类游戏面板扩展了JPanel{
公共游戏小组(){
setLayout(新的GridBagLayout());
GridBagConstraints gbc=新的GridBagConstraints();
用于(int行=0;行<6;行++){
for(int col=0;col<6;col++){
gbc.gridx=col;
gbc.gridy=行;
CellPanel CellPanel=新的CellPanel();
Border=null;
如果(第5行){
if(col<5){
边框=新的蒙版边框(1,1,0,0,颜色为灰色);
}否则{
边框=新的蒙版边框(1,1,0,1,颜色为灰色);
}
}否则{
if(col<5){
边框=新的蒙版边框(1,1,1,0,颜色为灰色);
}否则{
边框=新的蒙版边框(1,1,1,1,颜色为灰色);
}
}
cellPanel.命令(边框);
添加(电池板,gbc);
}
}
}
}
公共类CellPanel扩展了JPanel{
颜色背景;
公共小组委员会(){
addMouseListener(新的MouseAdapter(){
公共无效mouseClicked(MouseEvent e){
defaultBackground=getBackground();
如果(getBackground().equals(Color.BLUE)){
倒退(空);
}否则{
挫折背景(颜色:蓝色);
}
}
});
}
公共维度getPreferredSize(){
返回新维度(50,50);
}
}
也许可以尝试在gridbaglayout中添加额外的列和行。然后在for()构造中将它们作为特殊情况进行控制,或者从1开始索引,然后返回并在for()构造之外对它们进行寻址
创建另一个继承的JPanel,您可以将其用作CellLabel,特别是当它们看起来都很相似时 您可以将一些
JLabel
s添加到网格中相应的位置。在源代码中,缺少CellPanels
的类。如果您可以添加这个类,那么该程序将可由SO用户进行测试。@pzaenger好的。我会查出来的,谢谢。@Intai'sei你能用主方法添加零件吗?我认为pzaenger是对的,简单地添加一些标签可能是完成任务的最简单的方法。1)为了更快地获得更好的帮助,发布一个或多个标签。2) 提供最小尺寸的ASCII艺术或GUI预期布局的简单绘图,如果可以调整大小,则具有更大的宽度和高度。3) 另见。