【问题标题】:Java code derived from Javascript logic is not working properly从 Javascript 逻辑派生的 Java 代码无法正常工作
【发布时间】:2016-06-08 08:32:48
【问题描述】:

我正在使用 NetBeans8 IDE。

这是来自 Fiddle 的 java 脚本函数

 function animate() {
    xnow = parseInt(item.style.left);
    item.style.left = (xnow+1)+'px';
    ynow = parseInt(item.style.top);
    item.style.top = (ynow+Math.sin(2*Math.PI*(xnow/50))*10) + "px";
    setTimeout(animate,20);
}

这里程序员使用java脚本创建s移动正弦波。

同样的想法,通过做一些细微的改变,我使用timer t创建了一个java程序。方程和上面的完全一样。但是我的jRadioButton会去一个无法控制的地方。 是否可以通过这种方法创建移动正弦波?

请帮我解决这个问题..提前谢谢。

这是我的一段java代码

Timer t = new Timer(10, new ActionListener() {                                                                                           
    @Override                                                                                                                           
    public void actionPerformed(ActionEvent e) {            

                                          //AL1 is the name given to radiobutton
            int xnow=AL1.getX()+1;
            int ynow=AL1.getY();
            ynow=(int) (ynow+Math.sin(2*Math.PI*(xnow/50))*10);
            AL1.setLocation(xnow, ynow);
        }                                                                                                                            
});  


private void formWindowOpened(java.awt.event.WindowEvent evt) {                                  
    // TODO add your handling code here:
    AL1.setLocation(0, 200);
    t.start();
}


  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(Lpne, javax.swing.GroupLayout.DEFAULT_SIZE, 1030, Short.MAX_VALUE)
            .addContainerGap())
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(Lpne, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 551, Short.MAX_VALUE)
    );

请尽量控制我的jRadioButton..

谢谢大家... 这是最终结果

【问题讨论】:

  • 你把 AL1 放在哪里了?可能 Al1 的父级布局不支持基于笛卡尔坐标 (x, y) 像素的定位功能。
  • 它只是我的 JRadiobutton 的一个名字。显然它有 .getX() 和 'getY()` 方法。我还使用 JRadiobuttonJLabel 创建了一个模拟时钟跨度>
  • 我没有问 AL1 是什么。我问哪个对象包含AL1,我们称这个对象为AL1的父对象,AL1的父对象的布局类型是什么?
  • 我现在将所有组件放在jLayeredpane 描述的布局部分上。我对我的问题进行了一些编辑,请查看
  • stackoverflow.com/questions/8758229/…,你能检查一下吗?,我现在不能测试它,但使 continer 的布局为空应该可以工作。但它应该是 Al1 的父级,我建议你只用空的 contentPane 测试它没有分层窗格,然后尝试在您的布局系统中实现。

标签: javascript java netbeans-8 wave trigonometry


【解决方案1】:

2 个不同的问题会影响您的逻辑,

  • 布局:您需要将 Swing 组件放入没有布局的容器组件中。或者我们可以称它为没有布局的平面。

  • 除法:除法运算符接受 2 个操作数并返回一个值。这 2 个操作数和返回值都有一个类型。除法操作数的返回类型等于操作数的类型,它是最大的数字集。例如:int / short returns intint / int returns intfloat / int returns float

所以让我们考虑一下 javascript 中的除法,javascript 只有一种类型及其编号(实数集)。所以结果总是一个实数。

但是在 java 中,您将 xnow 定义为 int,而 50 是常量 int,那么结果必须是 int 这意味着:

30 / 50 = 0;

因此,您必须将操作数之一设为实数。 在 Java 中,您可以为此选择 Float 类型。

30 / 50F = 0.6;

50F 是一个常量浮点值。

因此,如果您像这样更改代码;

Timer t = new Timer(10, new ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent e) {
        int xnow = AL1.getX() + 1;
        int ynow = AL1.getY();

        ynow = (int)(ynow + Math.sin(2 * Math.PI * (xnow / 50 F)) * 10);
        AL1.setLocation(xnow, ynow);
    }
});

在这种容器中

private void initGui() {
    mainFrame = new JFrame("Test Frame");
    mainFrame.setSize(800, 600);
    mainFrame.setLayout(null);

    AL1 = new JRadioButton("Radio");
    AL1.setSize(100, 100);
    AL1.setVisible(true);
    AL1.setLocation(50, 50);
    mainFrame.add(AL1);

    mainFrame.setVisible(true);
}

您的逻辑将像在 javascript 中一样工作。

【讨论】:

  • 伟大的先生,工作顺利。感谢float ing 的想法。这对我来说真是一个新鲜的想法。非常感谢。
  • 嘿先生看看我的输出图像我所做的一切都是因为你的好主意老板。谢谢。
猜你喜欢
  • 1970-01-01
  • 2020-08-15
  • 2019-06-09
  • 1970-01-01
  • 2012-09-10
  • 1970-01-01
  • 2021-09-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多