2015-08-08 71 views
0

因此,这里是我的井字基本的模板:如何填写两个面板之间的边界?

package myProjects; 

import javax.swing.BorderFactory; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JLabel; 
import javax.swing.JButton; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.GridBagConstraints; 
import java.awt.event.*; 

public class SecondTickTacToe extends JFrame{ 

public JPanel mainPanel; 
public static JPanel[][] panel = new JPanel[3][3]; 

public static void main(String[] args) { 
    new SecondTickTacToe(); 
} 
public SecondTickTacToe(){ 
    this.setSize(310, 400); 
    this.setTitle("Tic Tac Toe"); 
    this.setLocationRelativeTo(null); 
    this.setDefaultCloseOperation(EXIT_ON_CLOSE); 

    mainPanel = new JPanel(); 

    for(int row=0; row<3; row++){ 
     for(int column=0; column<3; column++){ 
      int top=0; 
      int bottom=0; 
      int left=0; 
      int right=0; 
      panel[row][column] = new JPanel(); 
      panel[row][column].addMouseListener(new Mouse()); 
      panel[row][column].setPreferredSize(new Dimension(90, 90)); 
      panel[row][column].setBackground(Color.GREEN); 
      if(column==0||column==1) 
       right = 5; 
      if(column==1||column==2) 
       left = 5; 
      if(row==0||row==1) 
       bottom = 5; 
      if(row==1||row==2) 
       top = 5; 
      panel[row][column].setBorder(BorderFactory.createMatteBorder(top, left, bottom, right, Color.BLACK)); 
      addItem(panel[row][column], row, column); 
     } 
    } 

    this.add(mainPanel); 
    this.setVisible(true); 
} 
private void addItem(JComponent c, int x, int y){ 
    GridBagConstraints gbc = new GridBagConstraints(); 
    gbc.gridx = x; 
    gbc.gridy = y; 
    gbc.weightx = 100.0; 
    gbc.weighty = 100.0; 
    gbc.fill = GridBagConstraints.NONE; 
    mainPanel.add(c, gbc); 
    } 
} 
class Mouse extends MouseAdapter{ 
public void mousePressed(MouseEvent e){ 
    if(e.getSource() instanceof JPanel) 
     ((JPanel)e.getSource()).setBackground(Color.BLUE); 
    } 
} 

(你必须要运行的程序,看看我说的)

因此,这里是我的问题: 是有什么方法可以填充JPanels边界之间的空间?我希望它变得坚实。使面板变大似乎并不奏效,而增大边框尺寸似乎也无能为力。有谁知道如何使这项工作? (我的最终目标是使边框看起来像一个坚实的井字模板)

回答

2
mainPanel = new JPanel(); 

的默认布局为JPanelFlowLayout。默认情况下,FlowLayout在所有组件之间留下5个像素的间隙。如果你不想要这个差距,那么你需要改变布局。阅读FlowLayout API,您将找到允许指定0间隔的构造函数。

但是,使用FlowLayout可能不是最好的布局。 A GridLayout是用于行和列的更简单的布局。我建议你阅读How to Use Grid Layout的Swing教程中的部分以获取更多信息和示例。将不需要您的方法addItem(...)。当您使用适当的行/列创建GridLayout时,组件将自动换行到新行,以便您只将组件添加到面板。

mainPanel.add(c, gbc); 

顺便说一句,除非面板实际使用GridBagLayout,这是不指定GridBagConstraint什么都不做。

+0

谢谢,我不知道默认的边距:/我会修复你提到的一切,以及:) –

相关问题