2014-04-25 94 views
0

我是Java新手,使用paintComponent方法绘制椭圆时出现问题。我发现了许多类似的线程,但没有任何灵魂工作。我的代码:使用swing在画布上绘制椭圆

RacerMain.java

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

public class RacerMain { 
    public static void main (String[]args) { 
     //MainFrame mf = new MainFrame(); 
     JFrame jframe = new JFrame(); 
     JPanel jpanel = new JPanel(); 
     jframe.setSize(480,640); 
     jframe.add(jpanel); 
     jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     jpanel.add(new Dot()); 
     jframe.setVisible(true); 
    } 

} 

Dot.java

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

public class Dot extends JComponent{ 
    @Override 
    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     Graphics2D g2d = (Graphics2D)g; 
     g2d.setColor(Color.BLUE); 
     g2d.fillOval(20, 20, 20, 20); 
    } 
} 

为什么它不工作,以及如何得到这个代码的工作?

回答

2

JPanel使用FlowLayout尊重首选尺寸,但Dot组件的默认尺寸太小而无法看到。您需要使用使用最大可用区域的布局管理器,或覆盖getPreferredSize。记住调用JFrame#setVisible

jpanel.setLayout(new BorderLayout()); 
+0

这个伟大的工程。我的点在画布上可见。 – fragon

-1

之前调用pack或者你可以在构造函数中设置首选大小:

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

public class Dot extends JComponent { 
    public Dot() { 
     setPreferredSize(new Dimension(480, 640)); 
    } 

    @Override 
    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     Graphics2D g2d = (Graphics2D) g; 
     g2d.setColor(Color.BLUE); 
     g2d.fillOval(20, 20, 20, 20); 
    } 
}