PDA

View Full Version : مبتدی: align کردن متن فارسی در JTable



blaster-777
پنج شنبه 01 آبان 1393, 17:14 عصر
چطوری میشه متن فارسی داخل یک سلول jtable رو RTL کرد؟

محمد فدوی
پنج شنبه 01 آبان 1393, 19:07 عصر
سلام.
راه اصولی و پایه‌ایش اینه که خودت دوتا کلاس از TableCellRenderer و TableCellEditor پیاده سازی کنی و برای شیء JTable مورد نظرت قرار بدی. یکم طولانیه ولی برای مواقعی که میخوای از ریشه کار کنی مفیده!

اما اگه بخوام یه راه ساده تر بگم، من خودم دارم رو یه کلاس به اسم PersianSwing کار میکنم. احتمالا تا چند وقت دیگه‌م روی Github قرارش میدم. این یه تیکه‌ش کار شما رو راه میندازه!
هروقت یه کامپوننت داشتی و خواستی خودش، فرزندانش و فرزندان فرزندانش و ... بصورت راست به چپ قرار بگیرن از متد rtl استفاده کن:


public final class PersianSwing {
private PersianSwing() { }

private static final ContainerListener listener = new ContainerListener() {
@Override
public void componentAdded(ContainerEvent e) {
rtl(e.getChild());
}


@Override
public void componentRemoved(ContainerEvent e) {
}
};


private static <T extends Component> T rtl(T comp) {
comp.setComponentOrientation(ComponentOrientation. RIGHT_TO_LEFT);
if (comp instanceof Container) {
Container cont = (Container) comp;
cont.addContainerListener(listener);
for (Component child : cont.getComponents()) {
rtl(child);
}
}
return comp;
}
}



حالا اگه میخوای یه جدول راست به چپ (بطوری که همه سلولاش هم راست به چپ باشن) بسازی، کافیه اینکار رو کنی:


Object[][] rowData = {{1, "Str(1)"}, {2, "Str(2)"}, {3, "Str(3)"}};
String[] colData = {"Numeric", "String"};


JTable tbl = PersianSwing.rtl(new JTable(rowData, colData));



حتی اگه این متد رو روی شیء JFrame هم فراخوانی کنی همه‌ی فرزندانش و ... (به جز منوهاش) راست به چپ میشن:


public MyFrame extends JFrame {
public MyFrame() {
...
PersianSwing.rtl(this);
}
}


موفق باشی.

* بهتر بود سؤالت رو توی بخش JavaSE میپرسیدی