Java 创建粗体单元格边框线JTable
我正在尝试创建一个数独游戏,但在创建粗体线条以将其划分为3 x 3个区块时遇到了问题。我最近的尝试是使用Java 创建粗体单元格边框线JTable,java,swing,jtable,Java,Swing,Jtable,我正在尝试创建一个数独游戏,但在创建粗体线条以将其划分为3 x 3个区块时遇到了问题。我最近的尝试是使用JLabel在表的顶部添加一个图像。问题是标签完全覆盖了JTable。我在设置标签和桌子的不透明度时胡闹了一番,运气不好。以下是一些图片,展示我的目标: 当前的外观: 目标是: 如果您能给我一个方法,我可以使用创建这些线,它将非常感谢。无需直接回答,只需指向正确的方向。查看 它显示了如何为行中的每个单元格提供自定义的边框 因此,您需要修改代码,根据渲染的单元格提供多个不同的边框。签出 它显
JLabel
在表的顶部添加一个图像。问题是标签完全覆盖了JTable
。我在设置标签和桌子的不透明度时胡闹了一番,运气不好。以下是一些图片,展示我的目标:
当前的外观:
目标是:
如果您能给我一个方法,我可以使用创建这些线,它将非常感谢。无需直接回答,只需指向正确的方向。查看
它显示了如何为行中的每个单元格提供自定义的边框
因此,您需要修改代码,根据渲染的单元格提供多个不同的边框。签出
它显示了如何为行中的每个单元格提供自定义的边框
因此,您需要修改代码以根据渲染的单元格提供多个不同的边框。对于任何棋盘游戏,我倾向于使用网格布局(或一组网格布局)中的按钮,如或
不过,对于这个GUI中的边框,我会使用一个3 x 3组的九个网格布局,每个布局都有一个LineBorder
。默认情况下,边框将环绕显示在其中的面板的所有四个边,但它们与边框相交的位置将是两倍宽度,从而接近于重新创建第二个图像
例如
import java.awt.*;
导入javax.swing.*;
导入javax.swing.border.*;
导入java.util.*;
公务舱所渡子{
私有JComponent ui=null;
索杜科(){
initUI();
}
public void initUI(){
如果(ui!=null)返回;
ui=新的JPanel(新的GridLayout(3,3));
ui.新订单(新的空订单(4,4,4,4));
ArrayList值=新的ArrayList();
对于(intii=0;ii对于任何棋盘游戏,我倾向于使用网格布局(或一组网格布局)中的按钮,如或
不过,对于这个GUI中的边框,我会使用一组3 x 3的九个网格布局,每个布局都有一个LineBorder
。默认情况下,边框会环绕显示在其中的面板的所有四个侧面,但它们与边框相交的位置将是两倍宽度,从而接近于重新创建第二个图像
例如
import java.awt.*;
导入javax.swing.*;
导入javax.swing.border.*;
导入java.util.*;
公务舱所渡子{
私有JComponent ui=null;
索杜科(){
initUI();
}
public void initUI(){
如果(ui!=null)返回;
ui=新的JPanel(新的GridLayout(3,3));
ui.新订单(新的空订单(4,4,4,4));
ArrayList值=新的ArrayList();
对于(int ii=0;ii)将图像上载到论坛,以便它们可以显示在您的问题中。对于任何棋盘游戏,我倾向于使用网格布局(或一组网格布局)中的按钮就像在或中一样。但是对于这个GUI中的boarders,我会使用一个3 x 3组,共九个网格布局,每个布局都有一个LineBorder
。默认情况下,边框会环绕它所显示的面板的所有四个面,但是它们与边框相交的地方会是两倍宽度,从而接近于重新创建第二个图像。上传图像对于任何棋盘游戏,我倾向于使用网格布局(或一组网格布局)中的按钮就像在或中一样。但是对于这个GUI中的边界,我会使用一个3 x 3组,共九个网格布局,每个布局都有一个线边框
。默认情况下,边框会环绕它所显示的面板的所有四个面,但它们与边框相交的地方会是两倍宽度,从而接近于重新创建第二个图像。另请参见此view。另请参见此视图。
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);
}
}