我试图创建一个数独游戏,但我无法创建粗线来将其分成3 x 3块。我最近的尝试是使用JLabel
将图像强加到桌面上。问题是标签完全覆盖了JTable
。我愚蠢地设置了标签和桌子的不透明度而没有运气。以下是一些图片来展示我的目标:
目前看:
目标:
如果您可以告诉我可以用来创建这些线的方法,我们将不胜感激。没有直接的答案,只是朝着正确的方向发展。
答案 0 :(得分:2)
答案 1 :(得分:2)
对于任何棋盘游戏,我倾向于使用网格布局(或一组网格布局)中的按钮,如this mine sweeper game或this chess board。
对于此GUI中的边框,我将使用一个包含9个网格布局的3 x 3组,每个布局都有LineBorder
。默认情况下,边框将围绕显示的面板的所有四个边缘,但是它们与边框相交的位置将是双倍宽度,从而接近重新创建第二个图像。
E.G。
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.*;
public class Soduko {
private JComponent ui = null;
Soduko() {
initUI();
}
public void initUI() {
if (ui!=null) return;
ui = new JPanel(new GridLayout(3,3));
ui.setBorder(new EmptyBorder(4,4,4,4));
ArrayList<Integer> values = new ArrayList<>();
for (int ii=0; ii<34; ii++) {
values.add(0);
}
Random r = new Random();
for (int ii=34; ii<81; ii++) {
values.add(r.nextInt(9)+1);
}
Collections.shuffle(values);
int count=0;
for (int ii=0; ii<9; ii++) {
JPanel p = new JPanel(new GridLayout(3, 3));
p.setBorder(new LineBorder(Color.BLACK, 2));
ui.add(p);
for (int jj=0; jj<9; jj++) {
int v = values.get(count++).intValue();
String s = v>0 ? "" + v : "";
p.add(new JButton(s));
}
}
}
public JComponent getUI() {
return ui;
}
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
Soduko o = new Soduko();
JFrame f = new JFrame(o.getClass().getSimpleName());
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setLocationByPlatform(true);
f.setContentPane(o.getUI());
f.pack();
f.setMinimumSize(f.getSize());
f.setVisible(true);
}
};
SwingUtilities.invokeLater(r);
}
}