当前位置: 首页 > 面试题库 >

我该如何打勾?

江承嗣
2023-03-14
问题内容

我现在正在制作时钟,目前我的秒针,分针和时针都使用Line带有(x0, y0)开始坐标和(x1, y1)结束坐标的对象以图形方式绘制。

现在让我感到困惑的是如何使秒针每经过一秒就“滴答”。也就是说,如何更新(x1, y1)坐标(由于开始坐标始终位于时钟的中心,因此我们不需要更新坐标),以使其顺时针移动6度?这使我感到困惑,因为单位圆的方向(以及弧度的方向)是逆时针方向。


问题答案:

这个例子]非常好用…

public class TestClock {

    public static void main(String[] args) {
        new TestClock();
    }

    public TestClock() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException ex) {
                } catch (InstantiationException ex) {
                } catch (IllegalAccessException ex) {
                } catch (UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new ClockPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    protected class ClockPane extends JPanel {

        public ClockPane() {
            Timer timer = new Timer(1000, new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    repaint();
                }
            });
            timer.setRepeats(true);
            timer.setCoalesce(false);
            timer.start();
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(200, 200);
        }

        protected Point getPointTo(float angle) {

            int x = Math.round(getWidth() / 2);
            int y = Math.round(getHeight() / 2);

            double rads = Math.toRadians(angle);
            // This is an arbitrary amount, you will need to correct for this
            // I'm working of a width of 200 pixels, so that makes the radius
            // 100...
            int radius = 100;

            // Calculate the outter point of the line
            int xPosy = Math.round((float) (x + Math.cos(rads) * radius));
            int yPosy = Math.round((float) (y - Math.sin(rads) * radius));

            return new Point(xPosy, yPosy);

        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2d = (Graphics2D) g.create();

            g2d.setColor(Color.RED);

            Calendar cal = Calendar.getInstance();
            int seconds = cal.get(Calendar.SECOND);
            float angle = -(360f * (seconds / 60f));
            angle += 90; // Correct for 0 being out to the right instead of up

            Point p = getPointTo(angle);

            int x = getWidth() / 2;
            int y = getHeight() / 2;

            g2d.drawLine(x, y, p.x, p.y);

            FontMetrics fm = g2d.getFontMetrics();
            String text = Integer.toString(seconds);
            g2d.drawString(text, getWidth() - fm.stringWidth(text), getHeight() - fm.getHeight() + fm.getAscent());

            g2d.dispose();
        }
    }
}


 类似资料:
  • 问题内容: 我发现了这种奇怪: 输出: 这是如何运作的? 问题答案: 该数字适合64位,其二进制表示为: 程序从右到左为每个5位组解码一个字符 对于5位,可以表示2 = 32个字符。英文字母包含26个字母,因此除字母外还留出32-26 = 6个符号的空间。通过这种编码方案,您可以拥有全部26个(一种情况)的英文字母和6个符号(其中是空格)。 算法说明 该从组到组中的for循环跳跃,则5位组被分离安

  • 我从堆栈溢出的404 Not Found错误页面复制了下面的代码。 上面的代码编译精细,在控制台上打印404。我以为语句print(202*2);负责打印404,但我不对,因为更改此语句中的数字也打印404。 有人能帮我理解这个代码以及它是如何打印404的吗? 我发布编译输出供您参考,因为有评论说此代码无法编译。包含上述代码的文件是Test. c。 gcc测试。c-o测试 测验c: 3:1:警告:

  • 由于各种原因,我的单元测试环境无法访问启动ignite所需的环境。我不需要ignite来启动测试,我希望代码忽略对ignite的调用。开始()。我该怎么做? 我尝试过模拟点火,但当我尝试模拟start()方法时,它会抛出一个错误。 这会导致以下错误: 组织。莫基托。例外情况。误用。MissingMethodInvocationException:when()需要的参数必须是“模拟的方法调用”。例如

  • 问题内容: 我应该把包裹放在哪里,以便可以被另一个包裹导入? 问题答案: 设置您的GOPATH。将软件包foo源放入GOPATH / src / optional-whatever / foo / *。go中,并在代码中使用 你 并不 需要显式地安装foo,那么去工具是一个构建工具,它会做自动的为你需要的时候。

  • 问题内容: 我有一个网站,该网站根据访问者选择的位置显示不同的内容。例如:用户输入55812作为邮政编码。我知道哪个城市和地区纬度/经度。也就是给他们有关该领域的内容。我的问题是如何将其存储在Cookie中,以便他们返回时不需要总是输入邮政编码? 我看到如下: 根据其区域设置持久性cookie。 当他们返回已读取的cookie时,获取邮政编码。 根据Cookie中的邮政编码返回内容。 我似乎找不到

  • 问题内容: 我是量角器的新手,我正在尝试实施e2e测试。我不知道这是否是正确的方法,但是…我要测试的页面不是基于完整角度的页面,所以…我遇到了一些麻烦。 在我的第一个规范中,我有: 我已经创建了这个Login类,但是登录后我想打开联系页面,但是量角器会在页面完全加载之前立即尝试查找元素。 我尝试使用: 但这是行不通的……它总是在页面加载之前尝试查找元素。我也尝试过这个: 我可以使用来做到这一点,但