我无法在JFrame上绘制这个椭圆形。
static JFrame frame = new JFrame("New Frame");
public static void main(String[] args) {
makeframe();
paint(10,10,30,30);
}
//make frame
public static void makeframe(){
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel emptyLabel = new JLabel("");
emptyLabel.setPreferredSize(new Dimension(375, 300));
frame.getContentPane().add(emptyLabel , BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
// draw oval
public static void paint(int x,int y,int XSIZE,int YSIZE) {
Graphics g = frame.getGraphics();
g.setColor(Color.red);
g.fillOval(x, y, XSIZE, YSIZE);
g.dispose();
}
框架显示但未绘制任何内容。我在这里做错了什么?
答案 0 :(得分:8)
您创建了一个不会覆盖paint方法的静态方法。现在其他人已经指出你需要覆盖paintComponent等。但是为了快速修复你需要这样做:
public class MyFrame extends JFrame {
public MyFrame() {
super("My Frame");
// You can set the content pane of the frame to your custom class.
setContentPane(new DrawPane());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 400);
setVisible(true);
}
// Create a component that you can actually draw on.
class DrawPane extends JPanel {
public void paintComponent(Graphics g) {
g.fillRect(20, 20, 100, 200); // Draw on g here e.g.
}
}
public static void main(String args[]){
new MyFrame();
}
}
但是,正如其他人指出的那样......在JFrame上绘图非常棘手。最好在JPanel上绘图。
答案 1 :(得分:1)
有几个项目浮现在脑海中:
此外,您没有看到JLabel,因为paint()方法负责绘制组件本身以及子组件。覆盖paint()是邪恶的=)
答案 2 :(得分:0)
你要覆盖错误的paint()方法,你应该覆盖名为 paintComponent 的方法,如下所示:
@Override
public void paintComponent(Graphics g)
答案 3 :(得分:0)
您需要覆盖一个实际最多为您的Frame日期的存在绘制方法。在您的情况下,您刚刚创建了一个未被Frame默认调用的自定义新方法。
所以改变你的方法:
public void paint(Graphics g){
}