如何在盒子里放椭圆? import javax.swing.*; 导入java.awt.*; 公共类CGLinesGrid扩展了JFrame{ 公共CGLinesGrid(){ 超级(“练习4”); 设置大小(500500); setVisible(真); } 公共空间涂料(图g){ 对于(inti=1;i
在得到解决方案之前的几件事 首先,正如@realpoint所说,永远不要从组件中调用如何在盒子里放椭圆? 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
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);
}
}
}