我是Java的新手,我在使用paintComponent方法绘制椭圆时遇到问题。我找到了许多类似的线程,但没有一个灵魂有效。我的代码:
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);
}
}
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);
}
}
为什么它不起作用以及如何使这段代码有效?
答案 0 :(得分:2)
JPanel
使用尊重首选尺寸的FlowLayout
但Dot
组件的默认尺寸太小而无法看到。您需要使用使用可用最大区域的布局管理器或覆盖getPreferredSize
。在致电pack
JFrame#setVisible
jpanel.setLayout(new BorderLayout());
答案 1 :(得分:-1)
或者您可以在构造函数中设置首选大小:
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);
}
}