Witamy na forum PC Format Zapraszamy do REJESTRACJI


Użytkownicy przeglądający ten wątek: 1 gości

Menu (Nie widoczne długie opisy)

#1
Menu (Nie widoczne długie opisy)
Witam Wszystkich


Uczę się programować w Java, napisałem małą aplikacje z obszernym menu. Poszczególne elementy menu niestety ale nie są widoczne w całej okazałości gdyż kolejny element przykrywa poprzedni, pokaże to przykład:
Kod:
class Aplikacja{


JMenuBar pasek = new JMenuBar();

JMenu menu1 = new JMenu("Bardzo długi napis dla menu1");
JMenu menu2 = new JMenu("Bardzo długi napis dla menu2");
JMenu menu3 = new JMenu("BArdzo długi napis dla menu3");

public Aplikacja(){

  this.setJMenuBar(pasek);
  pasek.add(menu1);
  pasek.add(menu2);
  pasek.add(menu3);

}
}


W przykładzie obiektów typu JMenu są 3 u mnie jest 12 chodzi o to że długi opis każdego z obiektów przysłania poprzedni i wygląda to mało estetycznie.

Czy jest jakaś możliwść aby każdy opis elementu menu był widoczny cały a nie ucięty.

Ja próbowałem użyć JScrollPane i JTabbedPane ale albo te klasy do tego się nie nadają albo robiłem to nieumiejętnie bo efekt był mizerny.

Najlepiej by było gdyby owy sposób był w miarę aby taki początkujący samouk mógł go zrozumieć, za każdą pomoc będę bardzo wdzięczny.
Pozdrawiam
 System operacyjny: windows_eight Przeglądarka: ie
#2
RE: Menu (Nie widoczne długie opisy)
Nie pamiętam dokładnie, ale sprawdź czy nie możesz zmienić domyślnej wielkości - metoda setPreferredSize powinna być pomocna.
 System operacyjny: windows_ten Przeglądarka: firefox
#3
RE: Menu (Nie widoczne długie opisy)
Witam wszystkich ponownie i dziekuje prowadzącemu za szybką odpowiedź.

Zastosowałęm się do wskazówki i niestety pojawiła się masa nowych pytań.
Do obiektu JMenu menu1 dodałem słuchacza changeListener(), i w zależności od tego czy
obiekt menu1 jest zaznaczany czy też nie ustawiłem setPreferredSize() jak w poniższym

kodzie:
Kod:
class Aplikacja{


JMenuBar pasek = new JMenuBar();
JMojeMenu menu1 = new JMojeMenu("Bardzo długi napis dla menu1");
JMenu menu2 = new JMenu("Bardzo długi napis dla menu2");
JMenu menu3 = new JMenu("BArdzo długi napis dla menu3");

Rectangle2D rect2d = null;

public Aplikacja(){

  this.setJMenuBar(pasek);
  pasek.add(menu1);
  pasek.add(menu2);
  pasek.add(menu3);
 
  // Jak uzyskać obiekt rect2D z klasy JMojeMenu
  // Aby móc z niego korzystać w klasie Aplikacja
     rect2D = menu1.getRect2D(); // zwraca zawsze null dlaczego ??
  // Myślę(Mogę się mylić) że z owego obiektu mógł
  // bym pozyskać interesującą mnie długość napisu w moim menu1
  // A może jest jakiś inny sposób???, proszę o wyczerpującą odpowiedź.
 }
}

class JMojeMenu extends JMenu{
   private String str = null;
   private Rectangle2D rect2D = null;

   public JMojeMenu(String s){
      this.str = s;
      this.setText(str);
   }
   public void paintComponent(Graphics g){
      Graphics2D g2 = (Graphics2D)g;
      FontRenderContext context = g2.getFontRenderContext();
      Font f = g2.getFont();
      Rectangle2D rect2D = f.getStringBounds(str,context);
   }
   public Rectangle2D getRect2D(){
       return rect2D;
   }
}

Niestety wartość szerokości obiektu menu1 w metodzie setPreferredSize(300,menu1.getWidth


()); musiałem ustawić na stałą, bo wartość ta jest pobierana po dodania elementu menu1 do

paska w związku z tym jest już pomniejszona o wielkość kolejnego elementu który

przysłąnia element wcześniejszy.
Czy istnieje jakiś sposób na to aby sobie z tym poradzić ???.
Ja wpadłem na pomysł(może błędny proszę o odniesienie się do niego w komentarzach), że

może pobiorę metodą getFontRenderContext() context czcionki z JMenu a później za pomocą

metody getStringBounds(message,context), pobiorę interesujący
mnie obszar napisu mojego menu1.
Niestety użycie owych metod wiąże się(mogę się mylić) z contextem graficznym który jest

dostępny tylko w metodzie paintComponent().
Wiem że niemożna ingerować w sam proces rysowania ale czy istnieje jakiś sposób na

zwrócenie wartości z obiektu rect2D typu Rectangle2D z klasy JMojeMenu do klasy Aplikacja
a później wykorzystanie w klasie Aplikacja obiektu rect2D do uzyskania rozmiaru napisu na
menu1.
A może istnieje jakiś inny sposób, proszę o wyczerpującą odpowiedź.
Dziękuję i pozdrawiam.
 System operacyjny: windows_eight Przeglądarka: firefox
#4
RE: Menu (Nie widoczne długie opisy)
Tak na zdrowy rozum. Napisy w menu źle wyglądają, bo się nie mieszczą. W takim wypadku możesz zrobić menu kilku liniowe, żeby było miejsce na wszystkie opcje.

[Obrazek: 7vpvyrbxti4w.png]
 System operacyjny: windows_ten Przeglądarka: firefox
#5
RE: Menu (Nie widoczne długie opisy)
Mówiliśmy o estetyczności owego menu, a jak będzie wyglądało owe menu, jeśli napis pierwszego elementu będzie składał się z dwóch słów kolejny element z 10 a następny z 3 itd......?
 System operacyjny: windows_eight Przeglądarka: ie
#6
RE: Menu (Nie widoczne długie opisy)
Nieestetyczne to jest tworzenie menu, gdzie przycisk ma szerokość połowy ekranu. Jeżeli już z jakiegoś powodu musisz robić menu z takimi długimi opisami, to musisz wymyślić jak to przedstawić. Zaproponuj wygląd, to dopasuje się kod.
 System operacyjny: windows_ten Przeglądarka: firefox
Programy: Polecane / Nowe / Inne




Podobne wątki (Menu (Nie widoczne długie opisy))
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  menu dlaczego od razu nie wyświetla ? C/C++ rogal180 7 2344 20.04.2011, 21:49
Ostatni post: rogal180
  VB.NET - jak sprawdzić czy okno aplikacji jest widoczne ? Paweł01 1 2525 07.04.2011, 19:31
Ostatni post: wiesniak
  [Winapi/C++/SOLVED]Menu kontekstowe tray, nie chce zniknąć k2k9 0 1778 01.05.2009, 11:53
Ostatni post: k2k9

Skocz do:


Wybrane wątki (Menu (Nie widoczne długie opisy))
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  C++ gbr 5 1906 25.03.2019 12:53
Ostatni post: koneton
  Klasa wewnętrzna w C++ Physicist 4 1891 23.03.2019 18:28
Ostatni post: Physicist
  Ruby on Rails - tutoriale luciussulla 0 1629 23.03.2019 16:49
Ostatni post: luciussulla
Big Grin Czy dostane sie technikum informatycznego klaudiusz20046 6 3572 21.03.2019 01:28
Ostatni post: UnableToSee
  [C#] Program do moderacji czatów gier wiktrom12 0 2094 07.03.2019 15:33
Ostatni post: wiktrom12
  Mój pierwszy projekt - Pomoc rafal12999 1 2607 07.02.2019 22:01
Ostatni post: Szachista
  pomoc projekt scilab piesel18 2 3455 04.02.2019 09:03
Ostatni post: piesel18
  Szkoła Informatyczna Zikinan 1 2868 02.02.2019 17:59
Ostatni post: wojownikhaha
  [Java] Strona z zadaniami do rozwiązania i odpowiedziami rafal12999 2 3794 27.01.2019 13:44
Ostatni post: rafal12999
  kompilacja biblioteki Agui - cmake jurek2 0 3205 10.01.2019 13:12
Ostatni post: jurek2
  Zamiana całego zestawu znaków wg przyporządkowania BarHorab 5 3931 19.12.2018 16:45
Ostatni post: Szachista
  Sumowanie licz excel - problem OxyGenE 2 7009 19.12.2018 16:29
Ostatni post: Szachista
  Transfer plików via FTP Visual Basic FireBytes 1 2787 17.11.2018 21:07
Ostatni post: Szachista
  Jaki kod pod pewne zdarzenia visualbasic 2010 aktywny27 4 4790 07.11.2018 13:41
Ostatni post: Ajgor
Scared Ipad Pro programowanie? NissmoOne 4 5593 06.10.2018 12:22
Ostatni post: NissmoOne