Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在盒子里放椭圆? import javax.swing.*; 导入java.awt.*; 公共类CGLinesGrid扩展了JFrame{ 公共CGLinesGrid(){ 超级(“练习4”); 设置大小(500500); setVisible(真); } 公共空间涂料(图g){ 对于(inti=1;i_Java - Fatal编程技术网

如何在盒子里放椭圆? import javax.swing.*; 导入java.awt.*; 公共类CGLinesGrid扩展了JFrame{ 公共CGLinesGrid(){ 超级(“练习4”); 设置大小(500500); setVisible(真); } 公共空间涂料(图g){ 对于(inti=1;i

如何在盒子里放椭圆? import javax.swing.*; 导入java.awt.*; 公共类CGLinesGrid扩展了JFrame{ 公共CGLinesGrid(){ 超级(“练习4”); 设置大小(500500); setVisible(真); } 公共空间涂料(图g){ 对于(inti=1;i,java,Java,在得到解决方案之前的几件事 首先,正如@realpoint所说,永远不要从组件中调用paint()方法。始终使用paintComponent(Graphics g)方法 其次,调用paintComponent()方法时,始终使用 import javax.swing.*; import java.awt.*; public class CGLinesGrid extends JFrame { public CGLinesGrid () { super ("Exercis

在得到解决方案之前的几件事

首先,正如@realpoint所说,永远不要从组件中调用
paint()
方法。始终使用
paintComponent(Graphics g)
方法

其次,调用
paintComponent()
方法时,始终使用

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

public class CGLinesGrid extends JFrame {
    public CGLinesGrid () {
        super ("Exercise 4");
        setSize (500, 500);
        setVisible(true);
    }

    public void paint (Graphics g) {

        for (int i = 1; i<=9 ; i++) {
            g.drawLine(70, 30+i*40, 390, 30+i*40);              
            g.drawLine(30+i*40, 70, 30+i*40, 390);
        }
        for (int i = 1; i<=9 ; i++) {
            g.drawOval(70, 20+i*40, 40, 10+i*30);
        }
    }

    public static void main (String[] args) {
        CGLinesGrid draw = new CGLinesGrid();
        draw.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
第三,paintComponent()方法不应直接在
JFrame
上调用,而应使用
JPanel

现在开始解决问题

您需要一个8x8的正方形网格,每个正方形内有一个圆

最简单的方法是使用具有网格布局的
JPanel
,并在其中添加64个
JLabel
。然后每个JLabel将在该正方形中打印一个正方形和一个圆圈

从底部开始,我们需要创建打印出正方形和圆形的JLabel:

super.paintComponent(g);
接下来,我们需要一个
JPanel
,它在8 x 8网格中包含所有这些
JLabel
s:

class SquareWithCircleLabel extends JLabel {
    @Override
    public void paintComponent(Graphics g) {
        //notice the call to its parent method
        super.paintComponent(g);

        //draw the square and circle
        g.drawRect(0, 0, this.getWidth(), this.getHeight());
        g.drawOval(1, 1, this.getWidth() - 1, this.getHeight() - 1);
    }
}
完整的代码如下所示:

add(new PaintPanel());
import javax.swing.*;
导入java.awt.*;
公共类CGLinesGrid扩展了JFrame{
公共CGLinesGrid(){
超级(“练习4”);
设置大小(500500);
添加(新的PaintPanel());
setVisible(真);
}
公共静态void main(字符串[]args){
CGLinesGrid draw=新的CGLinesGrid();
draw.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
类PaintPanel扩展了JPanel{
油漆板(){
setLayout(新的GridLayout(9,9));
对于(int i=0;i<81;i++){
添加(新的带圆圈标签的正方形());
}
}
}
类SquareWithCircleLabel扩展了JLabel{
@凌驾
公共组件(图形g){
超级组件(g);
g、 drawRect(0,0,this.getWidth(),this.getHeight());
g、 drawOval(1,1,this.getWidth()-1,this.getHeight()-1);
}
}
}

有什么问题吗?我创建了一个8x8网格。我想在其中放一个椭圆。你能帮我吗?:(不要覆盖
paint
。你应该覆盖
paintComponent
方法。我不明白你的意思。对不起,我是初学者:(Yitzih先生,你提供的代码在我的Java上不起作用?Idk为什么。你添加的两个类中有错误。它说这两个类的层次结构不一致。:(先生,你能让代码更简单吗?我很困惑,因为我是一个初学者。)
add(new PaintPanel());
import javax.swing.*;
import java.awt.*;

public class CGLinesGrid extends JFrame {
    public CGLinesGrid () {
        super ("Exercise 4");
        setSize (500, 500);
        add(new PaintPanel());
        setVisible(true);
    }

    public static void main (String[] args) {
        CGLinesGrid draw = new CGLinesGrid();
        draw.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    class PaintPanel extends JPanel {
        PaintPanel() {
            setLayout(new GridLayout(9, 9));
            for (int i = 0; i < 81; i++) {
                add(new SquareWithCircleLabel());
            }
        }
    }

    class SquareWithCircleLabel extends JLabel {
        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);

            g.drawRect(0, 0, this.getWidth(), this.getHeight());
            g.drawOval(1, 1, this.getWidth() - 1, this.getHeight() - 1);
        }
    }

}