Java Jframe中的JPanel

Java Jframe中的JPanel,java,swing,jframe,jpanel,layout-manager,Java,Swing,Jframe,Jpanel,Layout Manager,我已经创建了一个对象,它扩展了JPanel并从(0,0)开始绘制一个短动画。它本身工作得很好,但我想在它上面添加一个按钮来处理动画的小动作 因此,在我的主要课程中,我做了以下几点: JFrame f = new JFrame("Test"); JButton testButton = new Button("BUTTON"); MyAnimationDrawer drawing1 = new MyAnimationDrawer(); 我想做的是: 如何将按钮和对象添加到JFrame中,使左上

我已经创建了一个对象,它扩展了JPanel并从(0,0)开始绘制一个短动画。它本身工作得很好,但我想在它上面添加一个按钮来处理动画的小动作

因此,在我的主要课程中,我做了以下几点:

JFrame f = new JFrame("Test");
JButton testButton = new Button("BUTTON");
MyAnimationDrawer drawing1 = new MyAnimationDrawer();
我想做的是:

如何将按钮和对象添加到JFrame中,使左上角充当(0,0)?完全如我的图像链接所示。

使用

JFrame
中心添加
绘图面板
。比如:

frame.add(drawingPanel, BorderLayout.CENTER);
上部面板
上添加
按钮
,然后在
JFrame的
北部
上添加
上部面板

upperPanel.add(button);
frame.add(upperPanel, BorderLayout.NORTH);
通过使用

JFrame
中心添加
绘图面板
。比如:

frame.add(drawingPanel, BorderLayout.CENTER);
上部面板
上添加
按钮
,然后在
JFrame的
北部
上添加
上部面板

upperPanel.add(button);
frame.add(upperPanel, BorderLayout.NORTH);

正如brano88所述,实现这一点的最简单方法是使用。下面是一个简短的例子,说明您希望使用此布局。由于
BorderLayout
是JFrame的默认布局管理器,因此无需显式设置它,只需直接使用它的字段即可

public class MyPanel extends JPanel {

    @Override
    public void paintComponent(Graphics g)   {
        super.paintComponent(g);

        Graphics2D g2d = (Graphics2D) g;
        g2d.setColor(Color.RED);
        g2d.fillRect(0, 0, getWidth(), getHeight());
    }


    public static void main(String[] args){
        JFrame frame = new JFrame("My frame");
        frame.setSize(800,600);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);

        //Button Panel
        JPanel buttonPanel = new JPanel();
        buttonPanel.add(new JButton("Click me!"));

        //Drawing panel
        MyPanel panel = new MyPanel();
        frame.add(panel, BorderLayout.CENTER);
        frame.add(buttonPanel, BorderLayout.NORTH);

        frame.setVisible(true);
    }
}

正如brano88所述,实现这一点的最简单方法是使用。下面是一个简短的例子,说明您希望使用此布局。由于
BorderLayout
是JFrame的默认布局管理器,因此无需显式设置它,只需直接使用它的字段即可

public class MyPanel extends JPanel {

    @Override
    public void paintComponent(Graphics g)   {
        super.paintComponent(g);

        Graphics2D g2d = (Graphics2D) g;
        g2d.setColor(Color.RED);
        g2d.fillRect(0, 0, getWidth(), getHeight());
    }


    public static void main(String[] args){
        JFrame frame = new JFrame("My frame");
        frame.setSize(800,600);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);

        //Button Panel
        JPanel buttonPanel = new JPanel();
        buttonPanel.add(new JButton("Click me!"));

        //Drawing panel
        MyPanel panel = new MyPanel();
        frame.add(panel, BorderLayout.CENTER);
        frame.add(buttonPanel, BorderLayout.NORTH);

        frame.setVisible(true);
    }
}

将按钮添加到面板,然后将面板添加到JFrame。忽略我上面的帖子,我以为您希望绘图(0,0)与框架(0,0)匹配。将按钮添加到面板,然后将面板添加到JFrame。忽略我上面的帖子,当您将BorderLayout设置为中心时,我以为您希望绘图(0,0)与框架(0,0)匹配,如果左侧或右侧没有任何内容,我假设它默认为整个screen@user32081水平扩展到整个屏幕,是的。当构造函数中只需要一个简单的
setBackground(…)
调用时,为什么要使用
paintComponent(…)
来设置背景色?JPanel在默认情况下是不透明的,所以这对他们来说很好。只是为了OP的利益。他显然在做一些绘图,所以我坚持这种风格,以防万一OP也想处理JComponent。你应该了解一下。当你将BorderLayout设置为中心时,如果左边或右边没有任何东西,我假设它默认为整个screen@user32081水平扩展到整个屏幕,是的。为什么要使用
paintComponent(…)
在构造函数中调用一个简单的
setBackground(…)
调用时设置背景色?JPanel在默认情况下是不透明的,所以这对他们来说很好。只是为了OP的利益。他显然在画画,所以我坚持这种风格,以防万一OP也想处理JC组件。你应该读一下。