当前位置: 首页 > 知识库问答 >
问题:

如何使用netbeans将jLabel从Jframe的一边动画到另一边

焦兴为
2023-03-14

我想创建一个小应用程序。在我的应用程序中,我有jlabel1jbutton1。我想使用jbutton单击将jlabel1从一边动画到另一边。我不知道如何在JButton1ActionPerformed中调用它来创建JLabel1的动画。我做了一个油漆应用程序代码,这是如下所示。

下面是我的代码:

public void paint(Graphics g)
{
    super.paint(g);
    Graphics2D g2=(Graphics2D)g;

   g2.drawString("ancd", x, y);
    try {
        Thread.sleep(10000);
    } catch (Exception e) {
        System.out.println(""+e);
    }
    x+=10;
    if(x>this.getWidth())
            {
               x=0;
            }
    repaint();
}

共有1个答案

萧明贤
2023-03-14

为了简单起见,你可以使用Swing计时器来制作动画。但是,如果我是你,我不会移动jlabel。但是,我将直接绘制到JPanel上,并保留一组位置(图像的x和y)。在定时器中,更新位置并重新绘制。

既然您想在屏幕上移动一个JLabel,那么可以这样做:

class DrawingSpace extends JPanel{

    private JLabel label;
    private JButton button;
    private Timer timer;    

    public DrawingSpace(){
        setPreferredSize(new Dimension(200, 300));
        initComponents();
        add(label);
        add(button);    
    }

    public void initComponents(){
        label = new JLabel("I am a JLabel !");
        label.setBackground(Color.YELLOW);
        label.setOpaque(true);
        button = new JButton("Move");

        //Move every (approx) 5 milliseconds        
        timer = new Timer(5, new ActionListener(){  
            @Override
            public void actionPerformed(ActionEvent e){
                //Move 1 px everytime
                label.setLocation(label.getLocation().x, label.getLocation().y+1);  
            }               
        });     
        button.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e){
                if(!timer.isRunning())
                    timer.start();
                else
                    timer.stop();   
            }   
        }); 
    }
}

然后运行程序的类:

class Mover{
    public static void main(String[] args){

        SwingUtilities.invokeLater(new Runnable() {     // Run the GUI codes on the EDT
            @Override
            public void run() {
                JFrame frame = new JFrame("Some Basic Animation");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new DrawingSpace());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);             
            }
        }); 
    }
}
 类似资料:
  • 问题内容: 我试图从另一个类调用重绘。但这行不通。我必须画一个框架。 此打印 因此它不会执行该部分。不管用。为什么? 问题答案: 看一下这个页面,看看第一个答案。这是一个与您的问题类似的,甚至不是确切的问题。 JFrame的方法已被弃用。编译器或您的IDE应该有点抱怨,特别是如果您将标记直接放置在方法上方(使用它来测试是否可以重写此方法,也就是您想做的事情)。 这意味着不鼓励使用它,并且某些功能可

  • 问题内容: 我有两个 newAccessLevels.java ,它有两个按钮“ Level 1”,“ Level 2”和 newAccessPanel.java。 我需要获取用户选择“ 1或2”的级别,以便可以在标题中显示它。 accessPanel.java, 例如访问级别1,访问级别2。如何完成此操作。下面是示例代码,因此,如果单击级别1,则将打开标题为* ACCESS LEVEL 1 的n

  • 问题内容: 我有一JFrame堂课,它是在Netbeans的设计部分制作的。我正在尝试创建一个登录按钮,该按钮将关闭当前框架并打开另一个框架,无论如何我可以这样做吗? 我努力了: 但我希望它在设计部分中可编辑! 问题答案: 双击NETBEANS中的“登录”按钮,或在Click事件上添加事件监听器(ActionListener)

  • 问题内容: 嗨,我试图将一些文本附加到同一包中另一个类的一个小问题。以下是与JFrame有关的主要类: 我包括测试变量只是为了轻松地重新创建问题,但是无论何时运行append函数,jFrame的文本区域中都不会出现任何内容。在我的方案中,我让客户端从服务器接收文本,然后将其附加到文本框中。 顺便说一句,我正在为JFrame使用IntelliJ GUI设计器。我只包含了重新创建问题所需的代码。我仍在

  • 可以使用另一个jFrame的按钮来处理jFrame吗?如果可能的话,这些代码在netbeans中应该是什么样子?