试图在JPanel上绘制但没有成功

时间:2013-10-20 14:28:57

标签: java swing jpanel paintcomponent

我正在努力学习用摇摆画画。我正在尝试创建一个圆圈并将其放置在JPanel中的特定位置。这就是我想出来的,但它没有显示任何数字:

import java.awt.*;
import javax.swing.*;

public class Circles extends JPanel {
private static final long serialVersionUID = 1L;

public Circles(){
    setBackground(Color.white);
    setPreferredSize(new Dimension(300, 300));
}

public void paintComponent(Graphics g){
    super.paintComponents(g);
    g.setColor(Color.black);
    g.drawRect(10, 10, 50, 50);
}
}

这是启动程序的类。

import java.awt.*;
import javax.swing.*;

public class StartCircles extends JFrame{
private static final long serialVersionUID = 1L;

private Circles circle;
public StartCircles(){
    Container c = getContentPane();
    circle = new Circles();
    c.setBackground(Color.white);
    c.setLayout(new FlowLayout());
    setSize(300, 300);
    c.add(circle);
    setVisible(true);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
}

public static void main(String[] args){
    StartCircles c1 = new StartCircles();
}
}

我做错了什么?如何将图形定位在我想要的位置?

3 个答案:

答案 0 :(得分:3)

您的代码运行完美,但您在这里绘制矩形。 所以如果你想绘制圆圈,你必须使用

以下方法之一

g.fillOval(10, 10, 50, 50);

g.drawOval(10, 10, 50, 50);

答案 1 :(得分:3)

Fixed

试试此SSCCE - 注意来源中的评论。

import java.awt.*;
import javax.swing.*;

public class StartCircles extends JFrame{
private static final long serialVersionUID = 1L;

private Circles circle;
public StartCircles(){
    Container c = getContentPane();
    circle = new Circles();
    c.setBackground(Color.white);
    c.setLayout(new FlowLayout());
    //setSize(300, 300);
    c.add(circle);
    setVisible(true);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    pack(); // size the GUI to the components within it
}

public static void main(String[] args){
    StartCircles c1 = new StartCircles();
}
}

class Circles extends JPanel {
private static final long serialVersionUID = 1L;

public Circles(){
    setBackground(Color.white);
    setPreferredSize(new Dimension(300, 300));
}

public void paintComponent(Graphics g){
    //super.paintComponents(g);  // WRONG METHOD!
    super.paintComponent(g);
    g.setColor(Color.black);
    g.drawRect(10, 10, 50, 50);
}
}

答案 2 :(得分:2)

g.drawRect(10, 10, 50, 50);一定会给你一个矩形。您需要查看有关如何绘制圆的文档。

您需要使用drawOval()绘制它。它需要4个参数:

  

x - 要绘制的椭圆的左上角的x坐标       y - 要绘制的椭圆的左上角的y坐标       width - 要绘制的椭圆的宽度       height - 要绘制的椭圆的高度。

因此,请将drawRect()替换为drawOval()