JPanel子类与Java中的gridLayout

时间:2013-12-28 13:45:22

标签: java swing jpanel subclass paintcomponent

我有JPanel的子类(MyPanel),我用它在按钮之间绘制线条。绘制线条有效,但问题是,当我使用MyPanel而不是JPanel时,gridLayout不起作用。我想从gridLayout得到的是按钮之间的间距以及它们应该如何排列的选择。我已经设法将它们放在没有gridLayout的网格中,但我无法使间距工作。所以我需要帮助的是让gridLayout工作或者在没有gridLayout的情况下修复按钮之间的间距。我拥有的按钮都添加到gameBoardPanel。

编辑:这就是目前的样子:

enter image description here

我想要的是增加25个像素左右的按钮间距。

    class MyPanel extends JPanel {//The subclass
    public MyPanel(GridLayout gridLayout) {
        setPreferredSize(new Dimension(400,400));              
    }

    @Override
    public void paintComponent(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        if(!drawline)  
            super.paintComponent(g);        

        else{
             g2.setStroke(new BasicStroke(3));
             g2.draw(new Line2D.Float(c,c,c2,d2));                  
        }
    }

这也是添加按钮的面板。

    gameBoardPanel=new MyPanel(new GridLayout(yAxis,xAxis,25,25));//creation of a panel        using MyPanel

1 个答案:

答案 0 :(得分:1)

使用带有间隙的GridLayout我没有问题。我不确定你的问题出在哪里,但这是一个例子。我正在使用5,5的布局,有25个间隙。

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;


public class MyPanel extends JPanel{

    public MyPanel() {
        setLayout(new GridLayout(5, 5, 25, 25));
        for (int i = 0; i < 25; i++) {
            add(new JButton(" "));
        }
    }

    private static void createAndShowGui() {
        JFrame frame = new JFrame();
        frame.add(new MyPanel());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGui();

            }
        });
    }
}

我使用了您尝试使用的相同GridLayout。所以我真的没看到问题在哪里

enter image description here