将JPanel添加到JFrame中

时间:2014-01-14 12:47:57

标签: java swing jframe jpanel

我有一个扩展BoardGUI的课程JFrame。我在JPanel中添加了按钮。当我尝试使用框架上的鼠标列表将面板添加到框架中时,按钮(撤消和重放)将变为不可见。当我将鼠标悬停在按钮上时,它们会变得可见。

这是我的代码:

public class BoardGUI extends JFrame {
    JButton a=new JButton("Undo");
    JButton r=new JButton("replay");
    JPanel jp=new JPanel();

    public BoardGUI() {

        // TODO Auto-generated constructor stub
        setTitle("Checkers Game");
        setSize(645, 700);

        jp.setLayout(new FlowLayout());
        jp.setPreferredSize(new Dimension(645,35));
        a.setVisible(true);
        r.setVisible(true);
        jp.add(a);
        jp.add(r);
        add(jp,BorderLayout.SOUTH);
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        addMouseListener(new MouseListener() {

            @Override
            public void mouseReleased(MouseEvent arg0) {
                // TODO Auto-generated method stub

            }

            @Override
            public void mousePressed(MouseEvent arg0) {
                // TODO Auto-generated method stub

            }

            @Override
            public void mouseExited(MouseEvent arg0) {
                // TODO Auto-generated method stub

            }

            @Override
            public void mouseEntered(MouseEvent arg0) {
                // TODO Auto-generated method stub

            }

            @Override
            public void mouseClicked(MouseEvent arg0) {
                // TODO Auto-generated method stub
                repaint();

            }
        });


    }
    public void paint(Graphics g)
    {
        for(int i=0;i<8;i++)
        {
            for(int j=0;j<8;j++)
            {
                g.fillRect(i*100, j*100, 100, 100);
            }
        }
    }
}

有人可以帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:4)

  • 覆盖getPreferredSize的{​​{1}},然后拨打JPanel而不是任何尺寸

  • 不要设置JFrame.pack()

  • 不要覆盖PreferredSize的{​​{1}},覆盖paint(另一个,单独的)JFrame,将此paintComponent添加到JPanel JPanel

.

JFrames CENTER area

答案 1 :(得分:0)

你有一个645 x 700 JFrame,你可以在上面画一个800 x 800的棋盘格。它可能会覆盖按钮。

将棋盘放在自己的JPanel中,并仅在该面板中绘制。将该面板放在JFrame的中心。

答案 2 :(得分:0)

不要使用:

a.setVisible(true);
r.setVisible(true);

不需要使用它。当使用setVisible(true)使框架可见时,所有组件都将被绘制。