Java Jframe中的JPanel
我已经创建了一个对象,它扩展了JPanel并从(0,0)开始绘制一个短动画。它本身工作得很好,但我想在它上面添加一个按钮来处理动画的小动作 因此,在我的主要课程中,我做了以下几点: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中,使左上
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组件。你应该读一下。