|
-
Apr 8th, 2008, 10:17 PM
#1
Thread Starter
PowerPoster
Can't dispose my dialog after moving it using swing timer
Hi all,
I use the swing timer to move a dialog from one position to another. Here is the code I have use.
Code:
// Set the main window display location
public void setWindowLocation()
{
int screenHeight = Toolkit.getDefaultToolkit().getScreenSize().height;
int screenWidth = Toolkit.getDefaultToolkit().getScreenSize().width;
int frameHeight = this.getHeight();
int frameWidth = this.getWidth();
int _xValue = (screenWidth - frameWidth);
int _yValue = (screenHeight - getTrayheight() );
int _yEnd = (screenHeight - frameHeight - getTrayheight() );
//this.setLocation((screenWidth - frameWidth), (screenHeight - frameHeight - getTrayheight() - WINDOW_SPACE));
this.setLocation(_xValue, _yValue);
while(_yValue > _yEnd){
dialogMotion(this, _xValue, _yValue);
_yValue -= 1;
}
// this.dispose();
}
// Dialog motion
private void dialogMotion(final MainDialog mainDialog, final int x, final int y){
AbstractAction abAction = new AbstractAction() {
public void actionPerformed(ActionEvent evnt) {
mainDialog.setLocation(x, y);
}
};
Timer motionTimer = new Timer(300, abAction);
motionTimer.setRepeats(false);
motionTimer.start();
}
// Find the taskbar height to place the main frame in lower-right corner
// of the viewable area of the screen.
private static int getTrayheight(){
return (Toolkit.getDefaultToolkit().getScreenSize().height -
GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds().height);
}
I think my code is clear to you. After moving the dialog onto the task bar, I want to dispose it. You can see that at the end of the while loop I've try it.
What happened there is, I can't see the dialog moving. it directly dispose. I add a breakpoint at the while loop and check, it iterate until condition is false. But I can't see the motion. If I comment the dispose code line as in my above code, I can see it moving.
Why is that. Your comment really helpful to me.
I'm worried is that debugging iterate that while loop but it is not visible.
“victory breeds hatred, the defeated live in pain; happily the peaceful live giving up victory and defeat” - Gautama Buddha
-
Apr 8th, 2008, 11:01 PM
#2
Re: Can't dispose my dialog after moving it using swing timer
I don't know what are you talking about. I can't see any calls to the dispose method in your code, except for the commented code in the method never called
"I'm not normally a praying man, but if you're up there, save me... Superman!" - Homer Simpson
My Blog
-
Apr 8th, 2008, 11:05 PM
#3
Thread Starter
PowerPoster
Re: Can't dispose my dialog after moving it using swing timer
Yes that's the line I talking about. Say I remove the comments on that code line
So what happened there is, dialog is dispose suddenly without moving it. If I add the comments, dialog moves nicely.
“victory breeds hatred, the defeated live in pain; happily the peaceful live giving up victory and defeat” - Gautama Buddha
-
Apr 8th, 2008, 11:30 PM
#4
Re: Can't dispose my dialog after moving it using swing timer
Finally got it to work 
Code:
import java.awt.Frame;
import java.awt.GraphicsEnvironment;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.AbstractAction;
import javax.swing.JDialog;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
public class JDialogNotification extends JDialog {
private static final long serialVersionUID = 9077763988467568226L;
private static int getTrayheight() {
return (Toolkit.getDefaultToolkit().getScreenSize().height - GraphicsEnvironment
.getLocalGraphicsEnvironment().getMaximumWindowBounds().height);
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
JDialogNotification dialog = new JDialogNotification(
new javax.swing.JFrame(), true);
dialog.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent e) {
System.exit(0);
}
});
dialog.setVisible(true);
}
});
}
public JDialogNotification(Frame owner, boolean modal) {
super(owner, modal);
initComponents();
setWindowLocation();
}
// Dialog motion
private void dialogMotion(final JDialog mainDialog, final int x, final int y) {
AbstractAction abAction = new AbstractAction() {
private static final long serialVersionUID = -1005676924292901160L;
public void actionPerformed(ActionEvent evnt) {
mainDialog.setLocation(x, y);
}
};
Timer motionTimer = new Timer(300, abAction);
motionTimer.setRepeats(false);
motionTimer.start();
}
private void initComponents() {
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(
getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(layout.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 138,
Short.MAX_VALUE));
layout.setVerticalGroup(layout.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 112,
Short.MAX_VALUE));
pack();
}
// Set the main window display location
public void setWindowLocation() {
try {
int screenHeight = Toolkit.getDefaultToolkit().getScreenSize().height;
int screenWidth = Toolkit.getDefaultToolkit().getScreenSize().width;
int frameHeight = this.getHeight();
int frameWidth = this.getWidth();
int _xValue = screenWidth - frameWidth;
int _yValue = screenHeight - getTrayheight();
int _yEnd = screenHeight - frameHeight - getTrayheight();
// this.setLocation((screenWidth - frameWidth), (screenHeight -
// frameHeight - getTrayheight() - WINDOW_SPACE));
this.setLocation(_xValue, _yValue);
while (_yValue > _yEnd) {
dialogMotion(this, _xValue, _yValue);
_yValue -= 1;
}
Thread.sleep(1000);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
Thread.sleep(1500);
System.exit(0);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
} catch (InterruptedException ex) {
Logger.getLogger(JDialogNotification.class.getName()).log(
Level.SEVERE, null, ex);
}
}
}
"I'm not normally a praying man, but if you're up there, save me... Superman!" - Homer Simpson
My Blog
-
Apr 8th, 2008, 11:46 PM
#5
Thread Starter
PowerPoster
Re: Can't dispose my dialog after moving it using swing timer
Thanks for the replay. I'm worried about that what is the usage of long value serialVersionUID in your code? Can you explain a little more that.
“victory breeds hatred, the defeated live in pain; happily the peaceful live giving up victory and defeat” - Gautama Buddha
-
Apr 8th, 2008, 11:59 PM
#6
Re: Can't dispose my dialog after moving it using swing timer
Ah it's nothing, doesn't affect this application at all
"I'm not normally a praying man, but if you're up there, save me... Superman!" - Homer Simpson
My Blog
-
Apr 9th, 2008, 12:57 AM
#7
Thread Starter
PowerPoster
Re: Can't dispose my dialog after moving it using swing timer
It's ok pal. May it's because of my bad explanation.
I have another question too. Using your code, I try to move the dialog in other way round you have done. Initially the dialog is on the tray, and I move into below of the tray.
So I add a button to the form and use the same way to do it. Here is the code.
Code:
private void hideWindow(MainDialog mainGialog){
try{ /// VBP - this line only
int _xAbove = mainGialog.getLocation().x;
int _yAbove = mainGialog.getLocation().y;
int _yBelow = mainGialog.getLocation().y + mainGialog.getHeight() + getTrayheight();
while(_yBelow > _yAbove){
hideWindowMotion(this, _xAbove, _yAbove);
_yAbove += 1;
}
Thread.sleep(1000);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
Thread.sleep(1500);
//System.exit(0);
dispose();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
private void hideWindowMotion(final MainDialog mainDialog, final int x, final int y){
AbstractAction abAction = new AbstractAction() {
public void actionPerformed(ActionEvent evnt) {
mainDialog.setLocation(x, y);
}
};
Timer motionTimer = new Timer(300, abAction);
motionTimer.setRepeats(false);
motionTimer.start();
}
What happened here is after click the button, dialog holds/freeze a little time that same to thread sleep and then start move. After that it dispose. Why it is happened. As far as I get there, it's happened on the Thread sleep. I can't reduce the sleep time also.
If I reduce the sleep time same scenario take there, not moving the dialog and just it's dispose.
“victory breeds hatred, the defeated live in pain; happily the peaceful live giving up victory and defeat” - Gautama Buddha
-
Apr 9th, 2008, 01:51 AM
#8
Re: Can't dispose my dialog after moving it using swing timer
Here is the new code, I can't actually remember what is it that I've changed in your original code :P
Code:
import java.awt.Frame;
import java.awt.GraphicsEnvironment;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.AbstractAction;
import javax.swing.JDialog;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
public class JDialogNotification extends JDialog {
private static final long serialVersionUID = 9077763988467568226L;
private static int getTrayheight() {
return (Toolkit.getDefaultToolkit().getScreenSize().height - GraphicsEnvironment
.getLocalGraphicsEnvironment().getMaximumWindowBounds().height);
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
JDialogNotification dialog = new JDialogNotification(
new javax.swing.JFrame(), true);
dialog.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent e) {
System.exit(0);
}
});
dialog.setVisible(true);
}
});
}
private void hideWindow() {
try { // / VBP - this line only
int _xAbove = getLocation().x;
int _yAbove = getLocation().y;
int _yBelow = getLocation().y + getHeight() + getTrayheight();
while (_yBelow > _yAbove) {
hideWindowMotion(this, _xAbove, _yAbove);
_yAbove += 1;
}
Thread.sleep(1000);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
Thread.sleep(1500);
dispose();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
private void hideWindowMotion(final JDialog mainDialog, final int x,
final int y) {
AbstractAction abAction = new AbstractAction() {
private static final long serialVersionUID = -1005676924292901160L;
public void actionPerformed(ActionEvent evnt) {
mainDialog.setLocation(x, y);
}
};
Timer motionTimer = new Timer(300, abAction);
motionTimer.setRepeats(false);
motionTimer.start();
}
public JDialogNotification(Frame owner, boolean modal) {
super(owner, modal);
initComponents();
setWindowLocation();
}
// Dialog motion
private void dialogMotion(final JDialog mainDialog, final int x, final int y) {
AbstractAction abAction = new AbstractAction() {
private static final long serialVersionUID = -1005676924292901160L;
public void actionPerformed(ActionEvent evnt) {
mainDialog.setLocation(x, y);
}
};
Timer motionTimer = new Timer(300, abAction);
motionTimer.setRepeats(false);
motionTimer.start();
}
private void initComponents() {
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(
getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(layout.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 138,
Short.MAX_VALUE));
layout.setVerticalGroup(layout.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 112,
Short.MAX_VALUE));
pack();
}
// Set the main window display location
public void setWindowLocation() {
try {
int screenHeight = Toolkit.getDefaultToolkit().getScreenSize().height;
int screenWidth = Toolkit.getDefaultToolkit().getScreenSize().width;
int frameHeight = this.getHeight();
int frameWidth = this.getWidth();
int _xValue = screenWidth - frameWidth;
int _yValue = screenHeight - getTrayheight();
int _yEnd = screenHeight - frameHeight - getTrayheight();
// this.setLocation((screenWidth - frameWidth), (screenHeight -
// frameHeight - getTrayheight() - WINDOW_SPACE));
this.setLocation(_xValue, _yValue);
while (_yValue > _yEnd) {
dialogMotion(this, _xValue, _yValue);
_yValue -= 1;
}
Thread.sleep(1000);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
Thread.sleep(1500);
hideWindow();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
} catch (InterruptedException ex) {
Logger.getLogger(JDialogNotification.class.getName()).log(
Level.SEVERE, null, ex);
}
}
}
"I'm not normally a praying man, but if you're up there, save me... Superman!" - Homer Simpson
My Blog
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|