Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.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
Java Gui和计时器问题_Java_Swing_User Interface - Fatal编程技术网

Java Gui和计时器问题

Java Gui和计时器问题,java,swing,user-interface,Java,Swing,User Interface,上周我问了一个关于Gui和计时器的问题。。。经过大量的研究,我发现没有任何东西可以与我的代码一起工作。。。如果有人能接受我的代码,并以某种方式操纵它工作,那将是惊人的。。。我希望我的代码显示一个框,然后使它与背景颜色相同的框重叠,然后在它旁边延迟显示一个新框 第一个代码: import java.awt.Graphics; import javax.swing.JPanel; import java.awt.Color; public class MovingSomething extends

上周我问了一个关于Gui和计时器的问题。。。经过大量的研究,我发现没有任何东西可以与我的代码一起工作。。。如果有人能接受我的代码,并以某种方式操纵它工作,那将是惊人的。。。我希望我的代码显示一个框,然后使它与背景颜色相同的框重叠,然后在它旁边延迟显示一个新框

第一个代码:

import java.awt.Graphics;
import javax.swing.JPanel;
import java.awt.Color;

public class MovingSomething extends JPanel
{
    public void paintComponent (final Graphics g)
    {     
        int i = 20;
        int cons = 50;
        int red = 40;
        int green = 50;

        g.setColor(Color.GREEN);
        g.fillRect(50, 50, 100, 100);

        while (i >= 0)
        {
            i -= 1;

            g.setColor(Color.RED);
            g.fillRect(red, cons, 100, 100);
            red += 10;

            g.setColor(Color.GREEN);
            g.fillRect(green, cons, 100, 100);
            green += 10;
        }
    }
}

只是为了你的一点帮助开始,我张贴这个代码。尽管请尝试从中学习,并提出有效的问题,这可能会出现,以获得整个事情的味道。如果你再努力一点,毫无疑问,你可以找到这个很棒的医生,这正好解释了你在这个例子中的需求

最新编辑:

请尝试此修改的代码,CustomPanel类与以前相同:

import java.awt.*;
import java.awt.event.*;
import java.util.Random;
import javax.swing.*;

public class MovingSquare
{
    private int x = 0;
    private int y = 100;
    private final int WIDTH = 100;
    private final int HEIGHT = 100;
    private Random random;
    private CustomPanel canvas;
    private Timer drawingTimer;
    private ActionListener timerAction = 
        new ActionListener()
    {
        @Override
        public void actionPerformed(ActionEvent ae)
        {
            /*if ((x + WIDTH > 500) && (y + HEIGHT > 500))
            {
                x = random.nextInt(500 - WIDTH);
                canvas.setValues(x, y, Color.BLUE);
            }
            else
            {
                x += WIDTH;
                canvas.setValues(x, y, Color.BLUE);
            }*/
            x = random.nextInt(500 - WIDTH);
            y = random.nextInt(500 - HEIGHT);
            canvas.setValues(x, y, new Color(
                random.nextFloat(), random.nextFloat()
                , random.nextFloat(), random.nextFloat()));
        }
    };

    public MovingSquare()
    {
        random = new Random();
    }

    private void displayGUI()
    {
        JFrame frame = new JFrame("Moving Sqaure");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        canvas = new CustomPanel();
        frame.setContentPane(canvas);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);

        drawingTimer = new Timer(1000, timerAction);
        drawingTimer.start();
    }

    public static void main(String... args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                new MovingSquare().displayGUI();
            }
        });
    }
}

最大的错误来自未经测试发布的代码,没有调用super.paintcomponent;它应该是重写的paintComponent方法中的第一个调用。不要忘记@Override注释,以确保覆盖了正确的方法。另外,请发布一个SSCCE,该SSCCE可通过复制和粘贴运行/编译。没有多少人喜欢每次都要重新创建JFrame,有时一天几次,如果有人能把我的代码用某种方式处理好,那就太棒了。。。我希望我的代码…:这看起来更像是一个代码转储,而不是一个实际问题。请不要简单地转储您的代码并让其他人为您修复它,而是展示您在解决方案方面的尝试,并询问有关此尝试的问题。投票结束是因为太本地化了。另外,在你的网站上你也得到了很好的建议。在上面的代码中,我看不到您尝试遵循此建议的结果。你在哪里尝试编码计时器?非常感谢你。。。我知道我可能看起来像个试图欺骗自己的混蛋,但老实说,我已经四处寻找并尝试了好几个星期了。。。再加上在我的课程中,老师现在不是在教gui。。。我选择使用GUI,而我最大的问题是,没有太多的模板供我使用。。我会把这个代码,并掌握在我自己的写作。。。你是一个救生员,安德烈,非常欢迎你,保持微笑。如果你真的想学习Swing,也想了解一下,对于富互联网应用程序,Java Swing IMHO的未来就在这里。。。当您呼叫公用电话铃时。。args为什么需要添加?在这段代码中,x组件在什么时候发生变化。。。比如说哪行代码决定了它的移动距离?嗯,字符串。。。是写字符串[]的另一种方式,或者您也可以写字符串\u005B\u005D,它们都是相同的东西,尽管在这里给出了两者的一个区别。关于第二个问题,请注意Moving Square类中ActionListener类的actionPerformed方法,在if else块中x发生了变化,表示x+=WIDTH或x=0:-
import java.awt.*;
import java.awt.event.*;
import java.util.Random;
import javax.swing.*;

public class MovingSquare
{
    private int x = 0;
    private int y = 100;
    private final int WIDTH = 100;
    private final int HEIGHT = 100;
    private Random random;
    private CustomPanel canvas;
    private Timer drawingTimer;
    private ActionListener timerAction = 
        new ActionListener()
    {
        @Override
        public void actionPerformed(ActionEvent ae)
        {
            /*if ((x + WIDTH > 500) && (y + HEIGHT > 500))
            {
                x = random.nextInt(500 - WIDTH);
                canvas.setValues(x, y, Color.BLUE);
            }
            else
            {
                x += WIDTH;
                canvas.setValues(x, y, Color.BLUE);
            }*/
            x = random.nextInt(500 - WIDTH);
            y = random.nextInt(500 - HEIGHT);
            canvas.setValues(x, y, new Color(
                random.nextFloat(), random.nextFloat()
                , random.nextFloat(), random.nextFloat()));
        }
    };

    public MovingSquare()
    {
        random = new Random();
    }

    private void displayGUI()
    {
        JFrame frame = new JFrame("Moving Sqaure");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        canvas = new CustomPanel();
        frame.setContentPane(canvas);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);

        drawingTimer = new Timer(1000, timerAction);
        drawingTimer.start();
    }

    public static void main(String... args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                new MovingSquare().displayGUI();
            }
        });
    }
}