Я хочу знать, как использовать задержки в Java-проекте в затмении, чтобы использовать компоненты рисования - PullRequest
0 голосов
/ 09 октября 2018

Я хочу иметь возможность использовать несколько компонентов рисования с задержками.когда я пытаюсь использовать задержку, программа просто останавливается и отображает только первый компонент рисования.без задержек показывает только второй компонент рисунка.Я пытаюсь сделать аналоговые часы, которые меняются каждые 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);
    }

}

1 Ответ

0 голосов
/ 09 октября 2018

Я думаю, вы не понимаете, как работает Java Swing.Есть несколько потоков, выполняемых для получения ключевых событий, перерисовки каждого компонента, ...

Как я понимаю в вашем вопросе и после просмотра примера кода, я рекомендую вам посмотреть, как работает Java Swing с MVC-шаблоном.здесь https://examples.javacodegeeks.com/core-java/java-swing-mvc-example/

После этого вам нужно будет создать поток в вашем контроллере, чтобы изменить ваш компонент через 30 секунд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...