如何获得彩色线来区分文本字段数组

我开发了一个框架,我使用GridBagLayout来安排12X12的文本字段。 即框架上共有144个文本字段。 现在我想在每个3列和3行之后用彩色线区分这些文本字段,如下图所示。 我试过很多方面,但我找不到解决办法。 请建议。 下面是我的代码的一部分。 提前致谢。

1 2 3 | 4 5 6 | 7 8 9 | 10 11 12 | | | 1 2 3 | 4 5 6 | 7 8 9 | 10 11 12 | | | 1 2 3 | 4 5 6 | 7 8 9 | 10 11 12 ------------------------------- 1 2 3 | 4 5 6 | 7 8 9 | 10 11 12 | | | 1 2 3 | 4 5 6 | 7 8 9 | 10 11 12 | | | 1 2 3 | 4 5 6 | 7 8 9 | 10 11 12 -------------------------------- | 1 2 3 | 4 5 6................ . . . . . 

请将每个数字视为图表中的一个文本字段。

 JTextField jt[][]=new JTextField[12][12]; for(int i=0;i<jt.length;i++) { for(int j=0;j<jt.length;j++) { jt[i][j] = new JTextField(1); constraints.gridx=j; consraints.gridy=i; gridbag.setConstraints(jt[i][j],cons); c.add(jt[i][j]); jt[i][j].setHorizontalAlignment(JTextField.CENTER); jt[i][j].setFont(new Font("TimesNewRoman",Font.BOLD,14)); jt[i][j].setDocument(new JTextFieldLimit(2)); } } 

您可以使用JSeparator或将每组3×3字段分成单独的窗格并使用LineBorder 。

只要您正确设置了字段,就可以使复合面板/ LineBorder正常工作

UPDATE

对不起,应该是MatteBorder :P

哑光边框

 GridBagConstraints gbc = new GridBagConstraints(); gbc.fill = GridBagConstraints.BOTH; gbc.gridx = 0; gbc.gridy = 0; for (int row = 0; row < 4; row++) { gbc.gridx = 0; add(buildGroup(0, 0, 1, 1), gbc); gbc.gridx++; add(buildGroup(0, 0, 1, 1), gbc); gbc.gridx++; add(buildGroup(0, 0, 1, 1), gbc); gbc.gridx++; add(buildGroup(0, 0, 1, 0), gbc); gbc.gridy++; } public JPanel buildGroup(int top, int left, int bottom, int right) { JPanel panel = new JPanel(new GridBagLayout()); panel.setBorder(new MatteBorder(top, left, bottom, right, Color.RED)); GridBagConstraints gbc = new GridBagConstraints(); gbc.insets = new Insets(2, 2, 2, 2); gbc.fill = GridBagConstraints.HORIZONTAL; for (int row = 0; row < 3; row++) { for (int col = 0; col < 3; col++) { JTextField field = new JTextField(8); gbc.gridx = col; gbc.gridy = row; panel.add(field, gbc); } } return panel; } 

现在,显然,你需要弄清楚如何为你的田地种子,但基本上,我只是传递你想要使用的字段(例如2D数组)。

或者使用分隔符:P

分离器

 for (int row = 0; row < 9; row++) { gbc.gridwidth = 1; gbc.weightx = 0; int verSplit = 0; for (int col = 0; col < 12; col++) { gbc.gridx++; add(new JTextField(8), gbc); verSplit++; if (verSplit == 3) { verSplit = 0; gbc.gridx++; if (horSplit % 3 == 0) { gbc.gridheight = 3; gbc.fill = GridBagConstraints.VERTICAL; add(new JSeparator(JSeparator.VERTICAL), gbc); gbc.fill = GridBagConstraints.HORIZONTAL; gbc.gridheight = 1; } } } horSplit++; gbc.gridx = 0; if (horSplit == 3) { horSplit = 0; gbc.gridy++; gbc.gridwidth = GridBagConstraints.REMAINDER; gbc.weightx = 1; add(new JSeparator(JSeparator.HORIZONTAL), gbc); } gbc.gridy++; } 

或者同一主题的变体

更新了现场管理

 // Build the array of fields, I used a col by row matrix JTextField fields[][] = new JTextField[12][12]; for (int col = 0; col < 12; col++) { for (int row = 0; row < 12; row++) { fields[col][row] = new JTextField(col + "x" + row, 8); } } // Build the groups... for (int row = 0; row < 12; row++) { gbc.gridx = 0; int col = 0; add(buildGroup(fields, col, row, 0, 0, 1, 1), gbc); col += 3; gbc.gridx++; add(buildGroup(fields, col, row, 0, 0, 1, 1), gbc); col += 3; gbc.gridx++; add(buildGroup(fields, col, row, 0, 0, 1, 1), gbc); col += 3; gbc.gridx++; add(buildGroup(fields, col, row, 0, 0, 1, 0), gbc); gbc.gridy++; row += 2; // This is important, don't miss this ;) } public JPanel buildGroup(JTextField[][] fields, int startCol, int startRow, int top, int left, int bottom, int right) { JPanel panel = new JPanel(new GridBagLayout()); panel.setBorder(new MatteBorder(top, left, bottom, right, Color.RED)); GridBagConstraints gbc = new GridBagConstraints(); gbc.insets = new Insets(2, 2, 2, 2); gbc.fill = GridBagConstraints.HORIZONTAL; for (int row = 0; row < 3; row++) { for (int col = 0; col < 3; col++) { // Get the field to use for this cell JTextField field = fields[col + startCol][row + startRow]; gbc.gridx = col; gbc.gridy = row; panel.add(field, gbc); } } return panel; }