在java中向jframe添加不同的jcomponents
我想在一个JPanel中绘制一些不同的JComponents。我使用不同的绘制方法创建了一些JComponents。然后在main中创建对象并将它们放到JFrame中。 我的问题是,窗口中只绘制了最后一个对象 如何在窗口中放置不同的JComponents,而不删除或重新绘制旧组件 (Model2的工作原理与Model1类似,但paintComponent有点不同)在java中向jframe添加不同的jcomponents,java,swing,jframe,paintcomponent,jcomponent,Java,Swing,Jframe,Paintcomponent,Jcomponent,我想在一个JPanel中绘制一些不同的JComponents。我使用不同的绘制方法创建了一些JComponents。然后在main中创建对象并将它们放到JFrame中。 我的问题是,窗口中只绘制了最后一个对象 如何在窗口中放置不同的JComponents,而不删除或重新绘制旧组件 (Model2的工作原理与Model1类似,但paintComponent有点不同) 默认情况下,JFrame使用BorderLayout。添加组件而不指定约束时,每个组件将放置在中心 指定约束条件,或者如果Borde
默认情况下,
JFrame
使用BorderLayout
。添加组件而不指定约束时,每个组件将放置在中心
指定约束条件,或者如果BorderLayout
不适合您,请切换到其他布局
要添加约束,请执行以下操作:
frame.add(new Model1(0,0), BorderLayout.NORTH);
我建议阅读,也建议阅读。此外,如果通过JDK提供的任何布局都不符合您的需要,请随时在线查找第三方布局。如果没有适合您需要的布局,您也可以创建自己的LayoutManager
我还建议使用
pack()
根据内部组件调整框架的大小,而不是使用frame.setSize
设置框架的大小。这样可以确保你的框架紧紧地包裹住里面的任何东西,不会留下任何空白。如果需要空白,则应由布局管理器处理。您可以指定组件的大小,或使用布局将对象放置在非一个位置。或者,您可以创建图形副本并在其中写入:
protected void paintComponent(Graphics g) {
g = g.create();
g.setColor(Color.BLACK);
g.drawOval(xPos, yPos, 5, 5);
g.dispose();
}
但最后一个变体效率不高:它在每次重新绘制时复制图形。进行自定义绘制时:
getPreferredSize()
方法以返回组件的大小,这样布局管理器就可以显示组件。现在,组件的大小是(0,0),因此没有要绘制的内容public class Model1 extends JComponent {
//private int xPos, yPos;
Model1 (int x, int y){
//this.xPos = x;
//this.yPos = y;
setLocation(x, y);
setSize( getPreferredSize() );
}
@Override
public Dimension getPreferredSize()
{
return new Dimension(5, 5);
}
@Override
protected void paintComponent(Graphics g) {
g.setColor(Color.BLACK);
//g.drawOval(xPos, yPos, 5, 5);
g.drawOval(0, 0, 5, 5);
}
}
public class Model1 extends JComponent {
//private int xPos, yPos;
Model1 (int x, int y){
//this.xPos = x;
//this.yPos = y;
setLocation(x, y);
setSize( getPreferredSize() );
}
@Override
public Dimension getPreferredSize()
{
return new Dimension(5, 5);
}
@Override
protected void paintComponent(Graphics g) {
g.setColor(Color.BLACK);
//g.drawOval(xPos, yPos, 5, 5);
g.drawOval(0, 0, 5, 5);
}
}