我尝试创建简单的类,它可以像这样滑动JPanel:
+ ---------- + + ------ + --- + + ---------- +
| | | | | | |
| JPanel1 | => | JPane | JP | => | JPanel2 |
| | | | | | |
+ ---------- + + ------ + --- + + ---------- +
我创建了javax.swing.Timer并添加到类中
timer = new Timer(50, this);
timer.start();
static final int frames = 5;
int counter = 0;
actionPerformed(ActionEvent e) {
if (counter >= frames) {
timer.stop();
counter = 0;
} else {
counter++;
jPanel2.setBounds(800 - 800 * counter / frames, 0, 800, 600);
}
}
这是工作,但是非常缓慢。我只有2-3 fps,并且不知道如何加快此方法的速度。你能帮我吗?
也许将计时器的间隔从50更改为较小的数字。
即从此:
timer = new Timer(50, this);
对此:
timer = new Timer(10, this);
注意:此处应避免使用幻数。
哎呀,像…
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class SlideEg extends JPanel {
private SlideContainer slideContainer = new SlideContainer();
public SlideEg() {
setLayout(new BorderLayout());
add(slideContainer, BorderLayout.CENTER);
JLabel helloLabel = new JLabel("Hello", SwingConstants.CENTER);
slideContainer.add(helloLabel);
Timer myTimer = new Timer(5000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JLabel goodbyeLabel = new JLabel("Goodbye", SwingConstants.CENTER);
goodbyeLabel.setOpaque(true);
goodbyeLabel.setBackground(Color.pink);
slideContainer.add(goodbyeLabel);
}
});
myTimer.setRepeats(false);
myTimer.start();
}
private static void createAndShowGui() {
SlideEg mainPanel = new SlideEg();
JFrame frame = new JFrame("SlideEg");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
class SlideContainer extends JLayeredPane {
private static final int PREF_W = 400;
private static final int PREF_H = PREF_W;
private static final int SLIDE_DELAY = 20;
protected static final int DELTA_X = 2;
Component oldComponent;
public SlideContainer() {
setLayout(null);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(PREF_W, PREF_H);
}
@Override
public Component add(Component comp) {
Component[] comps = getComponents();
if (comps.length > 0) {
oldComponent = comps[0];
}
if (oldComponent == comp) {
return super.add(comp);
}
if (oldComponent != null) {
putLayer((JComponent) oldComponent, JLayeredPane.DEFAULT_LAYER);
}
Component returnResult = super.add(comp);
putLayer((JComponent) comp, JLayeredPane.DRAG_LAYER);
comp.setSize(getPreferredSize());
comp.setVisible(true);
comp.setLocation(getPreferredSize().width, 0);
slideFromRight(comp, oldComponent);
return returnResult;
}
private void slideFromRight(final Component comp,
final Component oldComponent2) {
new Timer(SLIDE_DELAY, new ActionListener() {
@Override
public void actionPerformed(ActionEvent aEvt) {
int x = comp.getX();
if (x <= 0) {
comp.setLocation(0, 0);
putLayer((JComponent) comp, JLayeredPane.DEFAULT_LAYER);
if (oldComponent2 != null) {
remove(oldComponent2);
}
((Timer) aEvt.getSource()).stop();
} else {
x -= DELTA_X;
comp.setLocation(x, 0);
}
repaint();
}
}).start();
}
}
使用幻灯片组件,你需要在 sm.js 和 sm.css 之后额外引入如下两个文件: <link rel="stylesheet" href="//g.alicdn.com/msui/sm/0.6.2/css/sm-extend.min.css"> <script type='text/javascript' src='//g.alicdn.com/msui/sm/0.6.2/js/sm-exte
Progress,进度条,用于上传、下载等耗时并且需要显示进度的场景,用户可以随时中断该操作。在mpvue框架中实现这个功能是基于小程序的原生progress 组件,这里主要说一下它percent属性: percent 类型:Float 默认值:无 可选值:0-100 说明:百分比0~100 要实现上传或者下载过程中显示进度的效果,就需要实时修改 percent属性的值,下面示例代码是每隔 20m
幻灯片秀 自动依顺序显示每张图像。 播放幻灯片秀 同时播放音乐与幻灯片秀 使用操作接口 利用PSP™主机的按钮或线控装置进行操作
本文向大家介绍请手写一个幻灯片的效果相关面试题,主要包含被问及请手写一个幻灯片的效果时的应答技巧和注意事项,需要的朋友参考一下 使用css3 动画就可以,预览地址:https://codepen.io/ansonznl/pen/KLyJjX
本文向大家介绍原生JavaScript实现幻灯片效果,包括了原生JavaScript实现幻灯片效果的使用技巧和注意事项,需要的朋友参考一下 当我们制作一个页面时,尤其是制作一个首页时,通常会设计一个可以链接到整个网站的其他主体页面的导航栏,或者一段网站的介绍文字中会包含这页面的跳转,通常情况会使用title属性为这些跳转链接添加一些解释性的文字,但是我们可以通过制作一个幻灯片的demo,加强用户的
本文向大家介绍利用Angularjs实现幻灯片效果,包括了利用Angularjs实现幻灯片效果的使用技巧和注意事项,需要的朋友参考一下 前言 Jquery发展至今,幻灯组件已经非常成熟,所以下面小编带大家一起看看利用Angularjs实现幻灯片效果的步骤。 npm方式安装 使用方法 第一步(引入) 第二步(参数配置) 类型 说明 data Array 幻灯片图片数据 [{img: "1.jpg"