Java 在JPanel的中心添加一个矩形
我试图在Java 在JPanel的中心添加一个矩形,java,swing,jpanel,rectangles,Java,Swing,Jpanel,Rectangles,我试图在JPanel的中心画一个矩形。我已经编写了这段代码,但是当我运行它时,矩形不会出现在面板中。如果我尝试使用JFrame,将显示矩形。有人能帮我吗 矩形检测仪 矩形组件 1) 您需要覆盖RectangleComponent的getPreferredSize(),如下所示: @Override public Dimension getPreferredSize() { return new Dimension(box.width+box.x*2,box.hei
JPanel
的中心画一个矩形。我已经编写了这段代码,但是当我运行它时,矩形不会出现在面板中。如果我尝试使用JFrame
,将显示矩形。有人能帮我吗
矩形检测仪
矩形组件
1) 您需要覆盖RectangleComponent
的getPreferredSize()
,如下所示:
@Override
public Dimension getPreferredSize() {
return new Dimension(box.width+box.x*2,box.height+box.y*2);
}
2) 在自定义之前,调用paintComponent()
(super.paintComponent(g);
)的super()
方法
编辑:
公共类矩形组件扩展了JPanel{
专用列表框;
私有整数宽度=30;
私人室内高度=40;
专用int startX=10;
私人int startY=20;
公共矩形组件(){
Box=新的ArrayList();
对于(int i=0;i<3;i++){
添加(新矩形(startX+(宽度+startX)*i,startY,宽度,高度));
}
}
公共组件(图形g){
超级组件(g);
图形2d g2=(图形2d)g;
对于(int i=0;i
您可能需要设置矩形组件的首选大小,使其在容器中占据适当的空间。如果要在同一JPanel中绘制另一个矩形,该怎么办?
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import javax.swing.JPanel;
public class RectangleComponent extends JPanel{
private Rectangle box;
public RectangleComponent(){
box=new Rectangle(10,20,30,40);
}
public void paintComponent(Graphics g){
Graphics2D g2=(Graphics2D) g;
g2.draw(box);
g2.setColor(Color.BLUE);
g2.fill(box);
}
}
@Override
public Dimension getPreferredSize() {
return new Dimension(box.width+box.x*2,box.height+box.y*2);
}
public class RectangleComponent extends JPanel {
private List<Rectangle> boxes;
private int width = 30;
private int height = 40;
private int startX = 10;
private int startY = 20;
public RectangleComponent() {
boxes = new ArrayList<Rectangle>();
for (int i = 0; i < 3; i++){
boxes.add(new Rectangle(startX+(width+startX)*i, startY, width, height));
}
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
for (int i = 0; i < boxes.size(); i++){
g2.draw(boxes.get(i));
}
g2.setColor(Color.BLUE);
for (int i = 0; i < boxes.size(); i++){
g2.fill(boxes.get(i));
}
}
@Override
public Dimension getPreferredSize() {
return new Dimension(boxes.size()*(width+startX)+startX, height+startY*2);
}
}