gpt4 book ai didi

java - 使用 Swing Java 绘画

转载 作者:行者123 更新时间:2023-11-29 03:10:37 26 4
gpt4 key购买 nike

首先大家好!

我遇到了一个大问题:我需要构建一个程序,该程序包括构建一个包含 5 个方 block 和一个按钮的 java swing 界面。按钮功能是在方 block 内画一个圆。我有这段代码,但我不知道如何继续。

框架类:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
public class Window extends JFrame{

private static Pane pane;

private Window(){
setResizable(false);
setVisible(true);
setBounds(0,0,350,200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public static void main(String[] args){
Window window = new Window();
window.setLocationRelativeTo(null);

pane = new Pane();
window.add(pane);
}

}

Pane 类:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JLayeredPane;

public class Pane extends JPanel implements ActionListener{

private JButton next;

public Pane(){
setBounds(0,0,350,200);
setVisible(true);
setLayout(null);
repaint();

next = new JButton("Next");
next.setBounds(125,125,100,30);
next.addActionListener(this);
add(next);

}

public void actionPerformed (ActionEvent e){
Object source = e.getSource();
if (source == next){
Graphics g = this.getGraphics();
drawing(g);
}
}

public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawRect(50,50,50,50);
g.drawRect(100,50,50,50);
g.drawRect(150,50,50,50);
g.drawRect(200,50,50,50);
g.drawRect(250,50,50,50);
}

private int times = 0;
public void drawing(Graphics g){
if(times<5){
g.setColor(Color.RED);
g.fillOval(50+times*50, 50, 50, 50);
times++;
}
}

}

我有这样的问题和疑问:

  • 当我第一次点击“下一步”按钮时,圆圈在第一个方 block 中出现并立即消失。我该怎么做才能让圆圈第一次可见?
  • 当我第二次点击该按钮时,它出现在第二个方 block 中。我不知道,我想问的是:我怎样才能让第一个方 block 中的圆圈消失,只让第二个方 block 中的圆圈可见?当圆圈在第三个方 block 中时,我想做的是相同的,我想让第二个方 block 中的圆圈消失。
  • 如果我想让圆圈出现在程序的开头,但是我想要一个蓝色的圆圈,然后2°,3°,4°和5°的位置我想要一个红色的圆圈,怎么办我做吗? (请记住,当我点击“下一步”按钮时,圆圈会出现。

非常感谢大家!

最佳答案

//Graphics g = this.getGraphics();

不要使用 getGraphics() 进行绘画。这幅画只是暂时的,当组件重新绘制时就会丢失。

所有绘画必须在 paintComponent() 方法中完成。这意味着您需要在您的类中设置一个属性来告诉 paintComponent() 要绘制什么。

这样做的一种方法是保留要绘制的对象的 List。然后在 paintComponent() 方法中遍历 List 并绘制对象。

因此您可以使用如下代码创建列表:

List<Shape> shapes = new ArrayList<Shape>();

Shape 界面允许您表示几何形状,如圆形、矩形、多边形等。然后当您想要绘制第一个圆时,您可以使用以下代码将圆形 Shape 添加到列表中:

shapes.add( new Ellipse2D.Double(50, 50, 50, 50) );

最后在 paintComponent() 方法中,在绘制矩形之后,添加代码来绘制列表中的形状。

Graphics2D g2d = (Graphics2D)g.create();

for (Shape shape: shapes)
{
g2d.setColor( Color.RED );
g2d.fill( shape );
}

g2d.dispose()

因此,无论何时单击下一步按钮,都会清除列表并添加要绘制的新形状。或者,如果您不清除列表,那么您可以添加更多圆圈,它们都会被绘制。

关于java - 使用 Swing Java 绘画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29585353/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com