jlover
دوشنبه 13 اردیبهشت 1389, 23:15 عصر
با سلام
من از زمانیکه jdk 6 رو نصب کردم تا به حال، برای نمایش کاراکترهای فارسی در TextComponent ها که هیچ مشکلی ندیدم (چه swing و چه awt).
اما برای نمایش برچسب/عنوان مولفه های awt به فارسی، چرا !
هر زمان که قرینه ای از awt در swing باشه، خب میشه این مسئله رو نادیده گرفت، ولی یکی از همین مولفه های بی قرینه ی awt که کلاس TrayIcon باشه، ما رو مجبور به استفاده از PopupMenu و به تبع MenuItem میکنه و برای عنوان فقره های منو هست که مشکل خودشو نشون میده.
بگذارید مثالی بیارم :
import javax.swing.*;
import java.awt.*;
import java.io.*;
import java.util.Properties;
public class EmptyFarsiCharsOnAWT extends JFrame{
public EmptyFarsiCharsOnAWT() {
super("مثال");
setDefaultCloseOperation(3);
setVisible(rootPaneCheckingEnabled);
}
public static void main(String[] args) throws AWTException, IOException {
JFrame jFrame = new EmptyFarsiCharsOnAWT();
MenuItem show ;
// approach 1 = HardCoding :
/*
show = new MenuItem("\u0646\u0645\u0627\u06cc\u0634 ");
*
*/
// approach 2 = using simple utf-8 saved text file :
/*
BufferedReader in = new BufferedReader(new FileReader("farsiLabels.txt"));
String showLabel = in.readLine();
in.close();
show = new MenuItem(showLabel);
*
*/
// approach 3 = using properties file :
FileReader in = new FileReader("farsiLabels.properties");
Properties farsiLabels = new Properties();
farsiLabels.load(in);
show = new MenuItem(farsiLabels.getProperty("tray.show"));
PopupMenu popUp = new PopupMenu();
popUp.add(show);
// creating Tray object
Image iconIamge = Toolkit.getDefaultToolkit().getImage("greenIcon.png");
TrayIcon trayIcon = new TrayIcon(iconIamge, null, popUp);
SystemTray tray = SystemTray.getSystemTray();
tray.add(trayIcon);
jFrame.setIconImage(iconIamge);
}
}
البته وقتی در محیط توسعه امتحان کنید هر سه روش به درستی کاراکتر ها رو نمایش میدن، ولی وقتی یک آرشیو JAR بسازید و اون رو اجرا کنید، میبینید که فقط مربعهای توخالی نصیبتون میشه !
کسی راه حلی یا نظری اگه داره ممنون میشم ارایه بده
با تشکر
من از زمانیکه jdk 6 رو نصب کردم تا به حال، برای نمایش کاراکترهای فارسی در TextComponent ها که هیچ مشکلی ندیدم (چه swing و چه awt).
اما برای نمایش برچسب/عنوان مولفه های awt به فارسی، چرا !
هر زمان که قرینه ای از awt در swing باشه، خب میشه این مسئله رو نادیده گرفت، ولی یکی از همین مولفه های بی قرینه ی awt که کلاس TrayIcon باشه، ما رو مجبور به استفاده از PopupMenu و به تبع MenuItem میکنه و برای عنوان فقره های منو هست که مشکل خودشو نشون میده.
بگذارید مثالی بیارم :
import javax.swing.*;
import java.awt.*;
import java.io.*;
import java.util.Properties;
public class EmptyFarsiCharsOnAWT extends JFrame{
public EmptyFarsiCharsOnAWT() {
super("مثال");
setDefaultCloseOperation(3);
setVisible(rootPaneCheckingEnabled);
}
public static void main(String[] args) throws AWTException, IOException {
JFrame jFrame = new EmptyFarsiCharsOnAWT();
MenuItem show ;
// approach 1 = HardCoding :
/*
show = new MenuItem("\u0646\u0645\u0627\u06cc\u0634 ");
*
*/
// approach 2 = using simple utf-8 saved text file :
/*
BufferedReader in = new BufferedReader(new FileReader("farsiLabels.txt"));
String showLabel = in.readLine();
in.close();
show = new MenuItem(showLabel);
*
*/
// approach 3 = using properties file :
FileReader in = new FileReader("farsiLabels.properties");
Properties farsiLabels = new Properties();
farsiLabels.load(in);
show = new MenuItem(farsiLabels.getProperty("tray.show"));
PopupMenu popUp = new PopupMenu();
popUp.add(show);
// creating Tray object
Image iconIamge = Toolkit.getDefaultToolkit().getImage("greenIcon.png");
TrayIcon trayIcon = new TrayIcon(iconIamge, null, popUp);
SystemTray tray = SystemTray.getSystemTray();
tray.add(trayIcon);
jFrame.setIconImage(iconIamge);
}
}
البته وقتی در محیط توسعه امتحان کنید هر سه روش به درستی کاراکتر ها رو نمایش میدن، ولی وقتی یک آرشیو JAR بسازید و اون رو اجرا کنید، میبینید که فقط مربعهای توخالی نصیبتون میشه !
کسی راه حلی یا نظری اگه داره ممنون میشم ارایه بده
با تشکر