【问题标题】:Add a rectangle to the center of JPanel在 JPanel 的中心添加一个矩形
【发布时间】:2015-01-21 08:14:31
【问题描述】:

我正在尝试将Rectangle 绘制到JPanel 的中心。我已经制作了这段代码,但是当我运行它时,矩形没有出现在面板中。如果我尝试使用JFrame,则会出现矩形。有人可以帮我吗?

RectangleTester

package eventi5;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class RectangleTester {

    public static void main(String[] args) {
        JFrame frame = new JFrame("Rectangle");
        frame.setSize(250, 250);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        final RectangleComponent component = new RectangleComponent();
        frame.setVisible(true);
        JPanel panel=new JPanel();
        panel.add(component);
        frame.add(panel);
    }
}

RectangleComponent

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);
    }   
}

【问题讨论】:

  • 您可能需要设置 RectangleComponent 的首选大小,以使其在其容器中占据适当的空间。

标签: java swing jpanel rectangles


【解决方案1】:

1) 您需要覆盖 getPreferredSize()RectangleComponent 如下:

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(box.width+box.x*2,box.height+box.y*2);
    }

2) 在自定义之前调用paintComponent()(super.paintComponent(g);) 的super() 方法。

编辑:

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);
        }

    }

【讨论】:

  • 如果我想在同一个 JPanel 中绘制另一个 Rectangle 怎么办?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-20
  • 1970-01-01
  • 2021-05-28
相关资源
最近更新 更多