我是使用java swing的swing和设计界面的新手。我想要一个抽屉在滑动动画上点击按钮。首先,是否有可能这样做,如果是的话,我该怎么做。谢谢。对于某些特定的方法信息,我会很感激。使用java swing的滑动抽屉动画
回答
有许多你可能取决于你想要什么实现的可能途径实现。
这将让您只需更新这将充当抽奖尺寸的基础上,例如一个变量...
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class DrawerPaneTest {
public static void main(String[] args) {
new DrawerPaneTest();
}
public DrawerPaneTest() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new DrawerPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class DrawerPane extends JPanel {
private boolean drawIn = false;
private Timer timer;
private int drawWidth = 0;
private int drawDelta = 4;
public DrawerPane() {
addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
timer.stop();
drawIn = !drawIn;
drawDelta = drawIn ? 4 : -4;
timer.start();
}
});
timer = new Timer(40, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
drawWidth += drawDelta;
if (drawWidth >= getWidth()/2) {
drawWidth = getWidth()/2;
timer.stop();
} else if (drawWidth < 0) {
drawWidth = 0;
timer.stop();
}
repaint();
}
});
}
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
g2d.setColor(Color.RED);
g2d.drawFill(0, 0, drawWidth, getHeight());
g2d.dispose();
}
}
}
这是非常基本的,并没有考虑到诸如概念慢/慢等问题。对于这些,你最好看看一个专门的动画框架,像
您可能需要使用取决于什么是你想要实现的,我个人喜欢时间框架,主要是因为它给了我很大的自由度,像三叉戟这样的东西(主要)被设计为提供改变对象属性的能力,例如大小或位置。虽然时序框架可以做到这一点,但需要更多工作才能达到这一点。
我没有用通用吐温引擎,但已经看到了一些真正的好例子,如Sliding-Layout,这实际上可能meeet您的需求...
首先,我认为你不应该使用Canvas
,因为IMO不应该将Swing的组件与AWT混合使用(如果没有必要的话)(我正在谈论你放置在实际组件中的实际组件GUI - 我知道Swing是建立在AWT之上的)。
您可以改为使用JPanel
并使用其paintComponent
方法执行自定义绘画。有很多关于此的教程(例如Lesson: Performing Custom Painting)。一旦你想出了如何在你的JPanel
中绘制抽屉(简单地使用Graphics2D
绘图),你就需要对它进行动画处理:基本上,你只需要更新它的一些属性,很可能是某个位置。 ..
你想有一些很好的缓解效果,一切都很容易处理和打包,我建议你看看Universal Tween Engine。我已经使用它,并可以帮助你。
一旦你有你通用吐温引擎库链接到您的项目,只需使用一些电话如下:
Tween
.to(drawerProperties, Type.POSITION, 10.0f) // animate the POSITION property of your drawerProperties on 10.0 units of time
.target(100) // set the number of frames of that animation to
.ease(Quad.OUT) // set a nice quadratic effect on the animation
.start(tweenManager); // launch the animation
然后,在其他地方,你只需要有一个Thread
运行不断更新您的TweenManager
使用TweenManager#update
。
再次,它看起来像一个大量的工作,但它实际上是非常容易使用和通用吐温引擎的入门部分是非常好的。此外,如果你想真正动画添加到您的项目,这可以肯定是使用一个伟大的工具:)
最后一点:你可能需要在Swing的事件指派线程更新您的性质,取决于您的解决方案将如何实施。如果你不知道这么多关于这一点,你可以阅读Lesson: Concurrency in Swing - 或者只是搜索StackOverflow的,如果你已经具体问题:)
- 1. 滑动抽屉动画
- 2. 滑动抽屉窗帘动画
- 3. UIViewController半屏“抽屉滑动”动画
- 4. Android:滑动抽屉式动画
- 5. Android:滑动抽屉
- 6. 滑动抽屉Android
- 7. Android滑动抽屉
- 8. 滑动抽屉选项android
- 9. 滑动抽屉 - 不推荐使用
- 10. 滑动抽屉隐藏ListView
- 11. 滑动抽屉不显示
- 12. DrawerLayout不是滑动抽屉
- 13. 导航抽屉不滑动
- 14. Android上下滑动抽屉
- 15. Java Swing JPanel向上滑动动画?
- 16. 带有导航抽屉的可滑动面板,如动画
- 17. 滑动抽屉,处理抽屉的位置和宽度。
- 18. 如何为滑动抽屉设置动画?
- 19. 如何使滑动抽屉不透明?
- 20. 禁用打开滑动抽屉
- 21. 导航抽屉 - 禁用滑动
- 22. 顶部滑动的导航抽屉
- 23. 使用砌体自动布局的xcode滑动抽屉
- 24. 滑动抽屉的背景颜色
- 25. 带多个手柄的滑动抽屉
- 26. 滑动抽屉下的内容 - Android
- 27. 滑动抽屉中的按钮!
- 28. 左向右滑动抽屉在MapView的.......
- 29. Android的滑动抽屉不工作
- 30. iOS中的滑动抽屉相当于
能否请你大致让我们了解您已经有了,简而言之?就像,现在你的“抽屉”是什么?是否有一些'JPanel'被添加到一些'null'用于布局的'Container'? – ccjmne
我只是有一个画布......我知道如何添加一个按钮,并点击按钮,单击如何弹出一个新的窗口..但我不知道如何执行动画.. – nitinsh99