私のJavaアプリケーションでは、Android Toastと似たものが欲しかったです。私の同僚と共有し、将来的にそのコードを再利用するために、Toast-projectを独自のプロジェクトとして作成し、インポートできるライブラリにしました。ライブラリの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!"
という印を付けてフィードバックしています。
誰でも知っていますが、トーストプロジェクトのメインメソッドが正しくトーストを表示していますが、ライブラリとしてインポートするのはなぜですか?
* "Android Toastに似ています。私の同僚と共有し、将来的にコードを再利用するために、Toastプロジェクトを作成しました。" * Android Javaベースのアプリケーションのベースのプロジェクトです。期待どおりに動作するようにしてください。 Javaプロジェクトを最初から作成し、その方法で作業します。 –
引用する場合は正しく入力してください。私は_ "私の** Javaアプリケーション**のために、私はAndroidトーストに何か**類似した**が欲しいと思った。これはJavaベースのアプリです。私のポストで語ったように、私の「Toast-project」は、装飾されていないJFrame(Swing)を持つJavaアプリケーションです。 Android Toastと似ているのは、少し黒くて透明なボックスで、テキストが入っていて、5秒で消えてしまうからです。私はAndroid Toastを使用しませんでした。私は独自の "Java-Toast"を作成しました。それは最初からJavaプロジェクトです。 – KJaeg
すぐに役立つように、[MCVE]または[短く、自己完結型の正しい例](http://www.sscce.org/)を投稿してください。 –