Tôi đang cố gắng phát triển một tính năng giống như bánh mì nướng (Android) trong ứng dụng Swing của tôi. Là một độc lập, nó hoạt động hoàn hảo. Nhưng khi được tích hợp vào ứng dụng, các vấn đề đặt ra của nó.Android giống như bánh mì nướng trong Swing
Các tập tin Class là:
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();
}
}
Có thể có một số lỗi thực hiện, nhưng đây là điều cơ bản.
Tính năng này hoạt động tốt. Nhưng khi tôi cố gắng đưa nó vào con đường của một hoạt động chuyên sâu tài nguyên, nó bị vấp ngã. Như trong hoạt hình GIF không hiển thị, mà tôi nghĩ rằng nó ngụ ý rằng loại của nó bị đình trệ.
Việc sử dụng là:
Toast toast = Toast.showDailog("Generating PDF");
//resource intensive operation. Takes about 3-5seconds to execute
toast.hide();
Để thêm phần khốn khỗ, thậm chí sau khi "Toast" đã được xử lý, ứng dụng đang trở thành khiếp chậm. Tôi khá chắc chắn rằng chậm lại không phải là do các hoạt động trong câu hỏi, kể từ khi nó hoạt động hoàn hảo nếu tôi làm đi với "Bánh mì nướng".
Ai đó có thể vui lòng chỉ ra điều gì sai ở đây ???
Tôi đã xem qua this question. Nhưng những thứ có quá phức tạp hơn những gì tôi đang tìm kiếm. Những gì tôi đang tìm kiếm là một hộp thoại đơn giản. Không phải là một khung thổi đầy đủ mà cần phải chứa một số thành phần.
* Trân trọng Binaek Sarkar Foundation httc: //www.foundation.....in/* Không bao gồm sigs. hoặc thẻ gọi điện trong bài đăng. Nếu thông tin quan trọng đối với bạn, hãy đặt nó vào [hồ sơ của bạn] (http://stackoverflow.com/users/951243/binaek-sarkar). –
Rất tiếc! Sẽ nhớ nó lần sau. Cảm ơn bạn đã chỉ ra. –
Tôi đã xóa nó trước khi bình luận. –