对于我的Java应用程序,我想要类似于Android Toast的东西。为了与我的同事分享并在将来重新使用该代码片段,我将Toast项目创建为自己的项目,成为可导入的库。无法显示库的JFrame
我没有与吐司项目本身的问题。实际上,它可以像预期的那样工作,直接在Eclipse的主要方法中进行测试。
之后,我将其作为库(jar)导出,并将其导入到我的主项目(具有Swing GUI)的类中。我打电话给特定的方法,它应该显示敬酒,但没有任何反应。没有错误信息,只是没有。 我添加了一些println
的来查看我是否达到了代码,我确实做了什么。所以从我的库中调用的方法应该被执行,但不知何故它不会。吐司是一个简单,未装饰和半透明的JFrame
。因此,敬酒,代码非常简单:
// class extends JFrame
public Toast(String msg, int x, int y, int width, int height, Font font, Color background, Color foreground) {
setUndecorated(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setAlwaysOnTop(true);
setBackground(new Color(0f, 0f, 0f, 1f/3f));
setBounds(x, y, width, height);
contentPane = new ToastPane(background);
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
SpringLayout sl_contentPane = new SpringLayout();
contentPane.setLayout(sl_contentPane);
JLabel label = new JLabel(msg);
label.setFont(font);
label.setForeground(foreground);
sl_contentPane.putConstraint(SpringLayout.WEST, label, 5, SpringLayout.WEST, contentPane);
sl_contentPane.putConstraint(SpringLayout.SOUTH, label, 85, SpringLayout.NORTH, contentPane);
sl_contentPane.putConstraint(SpringLayout.EAST, label, 385, SpringLayout.WEST, contentPane);
label.setHorizontalAlignment(SwingConstants.CENTER);
sl_contentPane.putConstraint(SpringLayout.NORTH, label, 5, SpringLayout.NORTH, contentPane);
getContentPane().add(label);
}
这是用来显示来自外部的吐司(从我的主要项目)的方法:
public static void showToast(String msg, int x, int y, int width, int height, Font font, Color background, Color foreground, int displayTime)
{
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gd = ge.getDefaultScreenDevice();
boolean isPerPixelTranslucencySupported = gd.isWindowTranslucencySupported(PERPIXEL_TRANSLUCENT);
if(!isPerPixelTranslucencySupported)
{
System.out.println("Per-pixel translucency is not supported");
System.exit(0);
}
Toast toast = new Toast(msg, x, y, width, height, font, background, foreground);
toast.setVisible(true);
closeToast(displayTime, toast);
}
最后一个方法处置的JFrame的一定量的毫秒数后的吐司:
private static void closeToast(int displayTime, Toast toast)
{
final Timer timer = new Timer(displayTime, null);
timer.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
toast.dispose();
}
});
timer.start();
}
我的主要项目是调用敬酒方式如下:
public void showToast()
{
EventQueue.invokeLater(new Runnable(){
public void run()
{
try
{
System.out.println("Going to show the toast!");
Toast.showToast(message, x, y, width, height, font, background, foreground, displayTime);
} catch(Exception e)
{
e.printStackTrace();
}
}
});
}
println
给我的反馈,我打印出"Going to show the toast!"
达到Toast.showToast(...)
行。
有没有人知道,为什么吐司项目的主要方法是正确显示吐司,但将其作为库导入不?
*“类似于Android Toast。为了与我的同事分享并在将来重新使用该代码片段,我创建了我的Toast项目..”*我怀疑你可以创建一个Android基于Java的应用程序的基于项目。并按预期工作。用start&work的方式创建一个Java项目。 –
如果您引用,请正确填写。我写了_“对于我的Java应用程序**,我希望与Android Toast类似**。这是一个基于Java的应用程序。就像我在我的帖子中所说的,我的“Toast-project”是一个带有未修饰的透明JFrame(Swing)的Java应用程序。它仅与Android Toast类似,因为它是一个黑色的小透明盒子,里面有文字,它会在5秒内消失。我没有使用Android Toast。我创建了一个自己的“Java-Toast”。所以从一开始它就是一个Java项目。 – KJaeg
为了更快得到更好的帮助,请发布[MCVE]或[简短,独立,正确的示例](http://www.sscce.org/)。 –