Java 如何使JFrame四处移动?
我有一个带按钮的JFrame。点击按钮,第二帧在固定位置打开,计时器启动。计时器递增一个变量x。现在我想通过添加x的值来移动第二帧。它应该能帮助我理解JAVA中的可能性以及它是如何工作的。谢谢你的努力。这是代码Java 如何使JFrame四处移动?,java,swing,timer,jframe,move,Java,Swing,Timer,Jframe,Move,我有一个带按钮的JFrame。点击按钮,第二帧在固定位置打开,计时器启动。计时器递增一个变量x。现在我想通过添加x的值来移动第二帧。它应该能帮助我理解JAVA中的可能性以及它是如何工作的。谢谢你的努力。这是代码 ///////////////////////////////////// THE MAIN CLASS public class Main { public static void main (String[]args) { FrameOne
///////////////////////////////////// THE MAIN CLASS
public class Main {
public static void main (String[]args) {
FrameOne frameOne = new FrameOne(); }}
你应该使用一个。计时器启动时,您将获得帧的当前位置并递增“x”值,然后调用帧的setLocation(…)方法。@camickr感谢您的回答。它有很多信息我可以在未来使用。但这不是我现在需要的。我真的需要知道如何从实际计时器传递值,以及如何刷新帧以使其具有实际位置。它还涉及如何访问该方法。这就是它对我的意义。但是带有摆动计时器的tipp以后也可以使用。*我真的需要知道如何从实际计时器传递值以及如何刷新帧*-我已经说过这是错误的方法。您需要使用
getLocation()
方法获取帧的当前位置。然后使用setLocation(…)
方法更改该值。您可以将Timer和ActionListener定义为FrameTwo类的一个注释性内部类,以便于访问对话框的位置。@camickr Ok谢谢。这就是我需要的。你能给我一个基于我的示例代码吗?请参阅:。到目前为止,您已经发布了6个问题,除一个问题外,所有问题都有答案,但没有答案被接受。
/////////////////////////////////////////// THE FIRST FRAME
public class FrameOne extends JFrame implements ActionListener{
private FrameTwo frameTwo;
private JButton btn1 = new JButton();;
private TimerClass timerClass;
/////////////////////////////////////////// CONSTRUCTOR FrameOne
FrameOne(){
setLocation(300, 300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(300, 300);
setLayout(new FlowLayout());
setVisible(true);
this.add(btn1);
btn1.addActionListener(this);
////////////////////////// HERE THE SECOND FRAME AND TIMER ARE INITIALIZED /////////////////
@Override
public void actionPerformed (ActionEvent e) {
if(e.getSource()==btn1 ) {
frameTwo = new FrameTwo();
}
/////////////////////////////// THE SECOND FRAME /////////////////
public class FrameTwo extends JDialog {
FrameTwo() {
setLocation(timerClass.x, 300);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setSize(300, 300);
setVisible(true);
}
}
//////////////////////////////////// THE TIMER /////////////////
public class TimerClass implements EventListener{
public Timer timer = new Timer(true);
int x;
TimerClass (Runnable runIt){
timer.scheduleAtFixedRate(new TimerTask(){
@Override public void run() {
x++;
runIt.run();}
},1000, 1);
}}