源自Javascript逻辑的Java编解码器不能正常工作

时间:2016-06-08 08:32:48

标签: javascript java netbeans-8 wave sine

我正在使用NetBeans8 IDE。

这是来自 Fiddle

的java scrippt函数
 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脚本创建正在移动的正弦波。

同样的想法,通过稍微改变,我使用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 ..

感谢所有...... 这是最终结果

sine wave

1 个答案:

答案 0 :(得分:1)

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

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

  • 分区:Divison运算符接受2个操作数并返回一个值。这两个操作数和返回值有一个类型。 Divison operand的返回类型等于操作数类型,它是最大的数字集合。例如: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/50F)) * 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中一样工作。

相关问题