不知道我是否正确覆盖paintComponent()

问题描述 投票:0回答:1

对于想要了解有关awt / swing的更多信息而又没有对awt / swing进行很多工作的人,我不确定我是否正确执行了此操作。我想做的是使用创建6个圆的方法重写paintComponent(),这些圆应该在某些位置添加到inner面板中(x + 50y + 50仅用于测试目的)。我浏览了包括本网站在内的在线资源,圈子似乎仍然没有出现。我确定我做错了什么,但不确定。提示和/或信息链接将不胜感激

这是我要创建并向面板添加圆圈的课程:

public class TimeUnit extends JPanel {

private static final long serialVersionUID = 1L;
private int x = -50;
private int y = -50;

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

    ArrayList<Graphics> list = new ArrayList<Graphics>(6);
    for (int i = 0; i < 6; i++) {
        list.add(g.create());
    }

    for (Graphics r : list) {
        r.drawOval(x + 50, y + 50, 50, 50);

    }

}

这是将其合并到我的主程序中的位置:

           JPanel inner = new JPanel();
           inner.setLayout(null);
           inner.setSize(325, 570);
           inner.setBackground(null);
           inner.setLocation(500, 350);
           inner.setBorder(BorderFactory.createMatteBorder(0, 0, 0, 1, Color.BLACK));
           inner.setVisible(true);
           inner.repaint();



           //----Containers to Panel/Panel to Frame---------
           Panel.add(inner);
           Panel.add(labelOne);
           Panel.add(labelTwo);
           Panel.add(labelFour);
           Panel.add(labelEight);
           Panel.add(timeLabel);
           frame.add(Panel, BorderLayout.CENTER);   
java swing awt
1个回答
0
投票

您应该使用传入的Graphics g绘制椭圆,而不是创建新的Graphics对象:

@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    for (int i = 0; i < 6; i++) {
        g.drawOval(x + 50*i, y + 50*i, 50, 50);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.