我想在我的Swing應用程序中開發吐司(Android)功能。作爲一個獨立的,它的工作完美。但是,當將其整合到應用程序中時,其存在問題。Android像鞦韆吐司
類文件是:
import java.awt.*;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.geom.RoundRectangle2D;
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JLabel;
import net.mindcrew.utils.LayoutHelper.Packer;
public class Toast extends JDialog {
String text;
public Toast(String text) {
this.text = text;
initComponents();
}
private void initComponents(){
setLayout(new GridBagLayout());
addComponentListener(new ComponentAdapter() {
// Give the window an rounded rect shape. LOOKS GOOD
// If the window is resized, the shape is recalculated here.
@Override
public void componentResized(ComponentEvent e) {
setShape(new RoundRectangle2D.Double(0,0,getWidth(),getHeight(),50,50));
}
});
setUndecorated(true);
setSize(300,100);
setLocationRelativeTo(null);
getContentPane().setBackground(Color.BLACK);
// Determine what the GraphicsDevice can support.
GraphicsEnvironment ge =
GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gd = ge.getDefaultScreenDevice();
final boolean isTranslucencySupported =
gd.isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency.TRANSLUCENT);
//If shaped windows aren't supported, exit.
if (!gd.isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency.PERPIXEL_TRANSPARENT)) {
System.err.println("Shaped windows are not supported");
}
//If translucent windows aren't supported,
//create an opaque window.
if (!isTranslucencySupported) {
System.out.println(
"Translucency is not supported, creating an opaque window");
}
// Set the window to 70% translucency, if supported.
if (isTranslucencySupported) {
setOpacity(0.9f);
}
ImageIcon loading = new ImageIcon(Toast.class.getResource("/net/mindcrew/utils/userinterface/resources/loading-photo.gif"));
JLabel label = new JLabel(text);
label.setForeground(Color.WHITE);
label.setIcon(loading);
Packer packer = new Packer(this);
packer.pack(label).fillboth().west().inset(0, 50, 0, 20);
}
public static Toast showDailog(String textToDisplay){
final Toast toast = new Toast(textToDisplay);
// Display the window.
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
toast.setVisible(true);
}
});
thread.start();
return toast;
}
@Override
public void hide(){
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
setVisible(false);
dispose();
}
});
}
public static void main(String... args){
Toast toast = Toast.showDailog("Display");
try{
Thread.sleep(5000);
}
catch (Exception e){}
toast.hide();
}
}
可能有一些實施的故障,但是這是基本的東西。
這效果很好。但是當我試圖用資源密集型運營的方式來解決它時,它會絆倒。正如在GIF動畫中沒有顯示出來的那樣,我認爲這意味着它的這種停頓。
的使用方法是:
Toast toast = Toast.showDailog("Generating PDF");
//resource intensive operation. Takes about 3-5seconds to execute
toast.hide();
要添加到我的苦難,「吐司」已被釋放後,也將應用變得可怕緩慢。我相當肯定,減速並不是因爲有問題的操作,因爲如果我放棄了「吐司」,它的工作是完美的。
請問有人可以指出這裏有什麼錯?我想通過this question。但那裏的事情遠比我所尋找的要複雜得多。我正在尋找的是一個簡單的對話框。不是一個需要容納多個組件的完整吹制框架。
*問候 Binaek薩卡 基金會 httc://www.foundation.....in/*不包括SIGS。或在帖子中呼叫卡片。如果這些信息對您很重要,請將其放入[您的個人資料](http://stackoverflow.com/users/951243/binaek-sarkar)。 – 2012-04-15 10:35:39
糟糕!下次會記住它。感謝您指出。 – 2012-04-15 10:37:13
我在評論前刪除了它。 – 2012-04-15 10:38:07