Poniżej opisano, co można zaobserwować przez fragmencie kodu:
ComponentOrientation
ma zastosowanie tylko do Swing (i AWT faktycznie) komponentów.
Podczas korzystania z JFrame.setDefaultLookAndFeelDecorated(true);
, cała dekoracja ramki jest wykonywana przez Swing (w rzeczywistości sam LookAndFeel), więc działa zgodnie z oczekiwaniami.
Jeśli nie ustawisz tej opcji, oznacza to, że system operacyjny jest odpowiedzialny za dekorację ramki, jednak system operacyjny nie może być świadomy, że ComponentOrientation
używany jest przez komponenty Swing!
Spodziewam się systemu operacyjnego (czy wspomniałeś, jaki system operacyjny jest używany dokładnie?) Wygląda na to, że Windows 7 ma rację?), Aby wykonać poprawną dekorację na podstawie aktualnie wybranego ustawienia Ustawienia regionalne. Dlatego jeśli masz ustawiony język arabski i wybrany w systemie operacyjnym, domyślam się, że wszystkie dekoracje okien są od prawej do lewej. Czy próbowałeś zmienić to ustawienie regionalne (za pomocą panelu sterowania "Region i język")? Zadziałało?
Uwaga: Nie sądzę, aby można było zmienić te ustawienia systemu operacyjnego bezpośrednio z poziomu Java, ale można je odczytać za pomocą Locale.getDefault()
.
Podsumowując:
przede wszystkim, trzeba upewnić się, że system operacyjny jest poprawnie skonfigurowany pod względem orientacji tekstu; przepraszam, nie mogę tu nic poradzić, ponieważ nie mam zainstalowanych języków pisanych od prawej do lewej na moim komputerze z Windows.
następnie użyj wygląd systemu i czuć i upewnić się, że JFrame.setDefaultLookAndFeelDecorated(false);
jeśli to nie zadziała, to może rozważyć opublikowania swojej fragment kodu, wraz z konfiguracji systemu do listy bugów Oracle Java
Poniżej znajdują się dodatkowe noty o tym, jak poprawić tę część kodu (ale nie jest to poprawka dla Twojego problemu)
B y sposób, jeśli pozwalają użytkownikowi określić swoje preferencje językowe OS, to nie powinien wyraźnie ciężko kod frame.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
ale raczej użyć czegoś takiego:
frame.applyComponentOrientation(
ComponentOrientation.getOrientation(Locale.getDefault()));
Gdzie Locale.getDefault()
, chyba że wyraźnie zmieniła wewnątrz aplikacji, powróci aktualnie wybrany poziom OS Locale
.
Należy również zauważyć, że lepiej jest używać applyComponentOrientation()
niż setComponentOrientation()
, ponieważ pierwszy rekursywnie ustawia daną orientację na całą hierarchię komponentów.
Wreszcie, będziesz musiał upewnić się w swoich oknach, że użyta LayoutManager
jest od prawej do lewej; Zwykle jest to w porządku ze wszystkimi standardowymi układami Swing, ale nie dla wszystkich menedżerów układów zewnętrznych, jeśli ich używasz.
@ Eng.Fouad, nie jestem pewien, czy rozumiem pytanie. Wygląda na to, że chcesz mieć nieskoronowaną 'JFrame' ... – mre
@można zobaczyć aktualizację –
@ Eng.Fouad, a następnie zamiast ładować wygląd i sposób działania platformy, nie ładuj określonego wyglądu i stylu, który chcesz używać? – mre