我希望能够使用延迟的多个绘图组件。当我尝试使用延迟时,程序就会停止,只显示第一个绘图组件。没有延迟,只显示第二个绘图组件。我正在尝试制作一个模拟时钟,它每30秒改变一个小时,背景中的风景将会更新。第一个代码是主类,第二个是绘图组件1,最后一个是第二个绘图组件。我想要一些帮助。
//imports J Frame library
import javax.swing.JFrame;
public class MainClass
{
public static void main(String[] args)
{
// Creates variable window
JFrame window=new JFrame();
//creates window 640 wide by 480 high
window.setSize(640,480);
//Sets a title for JFrame
window.setTitle("This is a JFrame");
//End program when window closed
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Sets JFrame window to be seen
window.setVisible(true);
//Create an instance of DrawingComponent
DrawingComponent DC=new DrawingComponent();
//Add DC to window
window.add(DC);
try {
Thread.sleep(4000);
}
catch(Exception e) {
}
//Create an instance of DrawingComponent
DrawingComponent2 DC2=new DrawingComponent2();
//Add DC to window
window.add(DC2);
}
}`
//an instance of JComponenet class drawing component 1
import javax.swing.JComponent;
import java.awt.BasicStroke;
//import color library
import java.awt.Color;
//import font library
import java.awt.Font;
//imports graphics class
import java.awt.Graphics;
//imports 2D graphics class
import java.awt.Graphics2D;
//imports Rectangle class
import java.awt.Rectangle;
//imports 2D ellipse library
import java.awt.geom.Ellipse2D;
//imports 2D line library
import java.awt.geom.Line2D;
//imports 2D Point library
import java.awt.geom.Point2D;
//Graphics2D g2 = (Graphics2D) g;
import java.util.concurrent.TimeUnit;
//Created a class DrawComponenet needed to add extends JComponenet
public class DrawingComponent extends JComponent
{
//implemented a method from JCompnent class
public void paintComponent(Graphics g)
{
Graphics2D g2d = (Graphics2D) g;
g2d.setStroke(new BasicStroke(10));
g.setColor(Color.black);
g2d.setStroke(new BasicStroke(20));
g.drawOval(100,10,400,400);
g.setColor(Color.white);
g.fillOval(100,10,400,400);
}
}
/an instance of JComponenet class drawing component 2
import javax.swing.JComponent;
import java.awt.BasicStroke;
//import color library
import java.awt.Color;
//import font library
import java.awt.Font;
//imports graphics class
import java.awt.Graphics;
//imports 2D graphics class
import java.awt.Graphics2D;
//imports Rectangle class
import java.awt.Rectangle;
//imports 2D ellipse library
import java.awt.geom.Ellipse2D;
//imports 2D line library
import java.awt.geom.Line2D;
//imports 2D Point library
import java.awt.geom.Point2D;
//Created a class DrawComponenet needed to add extends JComponenet
public class DrawingComponent2 extends JComponent
{
public void paintComponent(Graphics g)
{
Graphics2D g2d = (Graphics2D) g;
g2d.setStroke(new BasicStroke(10));
g.setColor(Color.orange);
g2d.setStroke(new BasicStroke(20));
g.drawOval(100,10,400,400);
g.setColor(Color.blue);
g.fillOval(100,10,400,800);
}
}发布于 2018-10-09 16:02:50
我想您不了解Java swing是如何工作的。有多个线程运行,以获取关键事件,重新绘制每个组件,...
正如我在您的问题中所理解的那样,在看完您的代码示例之后,我建议您在这里了解一下使用MVC模式的Java Swing是如何工作的,https://examples.javacodegeeks.com/core-java/java-swing-mvc-example/
在此之后,您应该在控制器中创建一个线程,以便在30秒后更改您的组件。
https://stackoverflow.com/questions/52710703
复制相似问题