画面の上部に(装飾されていない(true);)表示している単純なJFrame
(320 X 64)を作成しました。JFrame
画面の上に描画して下にスライドさせ、数秒待ってから上に戻って処分する簡単な方法はありますか?
質問する
689 次
1 に答える
2
を使用する必要がありますSwing Timer
。JFrame#setLocation(int x,int y)
ここに私が作った小さな例があります:
を介して取得された画面の下部に到達するまで、座標を下方向 (y 軸上) に開始して装飾なしSwing Timer
で移動するだけです。その後、新しい2500 ミリ秒を開始して、画面の上部に戻ります。 JFrame
GraphicsEnvironment#getMaximumWindowBounds()
Swing Timer
JFrame
dispose()
JFrame
import java.awt.Dimension;
import java.awt.GraphicsEnvironment;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
public class AnimateJFrame {
private JFrame frame;
public AnimateJFrame() {
initComponents();
}
private void initComponents() {
frame = new JFrame() {
@Override
public Dimension getPreferredSize() {
return new Dimension(300, 300);
}
};
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setUndecorated(true);
frame.pack();
frame.setVisible(true);
createAndStartDownwardTimer(frame);
}
private void createAndStartDownwardTimer(final JFrame frame) {
new Timer(25, new AbstractAction() {
int screenHeight = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds().height;
int y = frame.getY();
@Override
public void actionPerformed(ActionEvent ae) {
if (frame.getY() + frame.getHeight() < screenHeight) {
y += 10;
frame.setLocation(frame.getX(), y);
} else {
createAndStartUpwardTimer(2500 - 15);//15milis approx latency
((Timer) ae.getSource()).stop();
}
}
}).start();
}
private void createAndStartUpwardTimer(int initialDelay) {
Timer t = new Timer(25, new AbstractAction() {
int y = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds().height - frame.getHeight();
@Override
public void actionPerformed(ActionEvent ae) {
if (frame.getY() > 0) {
y -= 10;
frame.setLocation(frame.getX(), y);
} else {
frame.dispose();
((Timer) ae.getSource()).stop();
}
}
});
t.setInitialDelay(initialDelay);
t.start();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new AnimateJFrame();
}
});
}
}
于 2013-01-16T20:56:07.750 に答える