[英]Numbers around JPanel; JPanel border?
我正在創建一個迷你游戲而且我被卡住了。 這個網格應該是nxn,但在這種情況下它是6x6,直到我解決了問題。
無論如何,我想創建一個透明的邊框
這將在每個單元格上方添加居中數字(在左側和上方,但是,稍后我必須添加權限側和向下)。 這樣做有什么好辦法? 我四處搜尋,因為我知道國際象棋棋盤有這種“邊界”,我實際上搜查了它們,但沒有運氣。
這是一個代碼片段,單元格包含在一個簡單的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, 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);
}
}
也許嘗試在gridbaglayout中添加一個額外的列和行。 然后在for()構造中將它們作為特殊情況控制或在1處啟動索引,然后返回並在for()構造之外解決它們。
創建另一個可以用作CellLabel的繼承JPanel,特別是如果它們看起來都相似的話。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.