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 3593 20.04.2011, 21:49
Ostatni post: rogal180
  VB.NET - jak sprawdzić czy okno aplikacji jest widoczne ? Paweł01 1 3591 07.04.2011, 19:31
Ostatni post: wiesniak
  [Winapi/C++/SOLVED]Menu kontekstowe tray, nie chce zniknąć k2k9 0 2839 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
  Validacja JS kolo48 3 3154 16.04.2020 14:06
Ostatni post: koneton
  Automatyczne wykonywanie czynności na stronie Fresher 0 2436 15.04.2020 20:53
Ostatni post: Fresher
  Visual Studio Code- zmiana folderu rozszerzeń Physicist 4 4040 05.04.2020 15:46
Ostatni post: Physicist
  Prośba o pomoc przy wyborze języka do konkretnego projektu. romands 6 3286 05.04.2020 14:07
Ostatni post: romands
Sad PhpMyAdmin w Mysql 8.0 Lauczi 3 3250 31.03.2020 16:34
Ostatni post: Lauczi
Ściana Klika pytań plz pomóżcie Samek2222 1 3080 22.03.2020 18:59
Ostatni post: Ajgor
  Pytanie - programowanie batch [cmd] Max23 0 3060 20.03.2020 01:03
Ostatni post: Max23
  Oczekiwanie na Akcje przycisku wanhelsing 8 4871 01.03.2020 19:44
Ostatni post: Szachista
Toungue Wybór szkoły średniej przez potencjalnego programistę Zikinan 1 4662 09.02.2020 15:58
Ostatni post: dzikuu86
  Skrypt pod sklep internetowy Talcia 4 7264 14.12.2019 19:48
Ostatni post: hexopex760
  Poszukuję pomysłu na prosty program ;) janciu96 5 14029 13.12.2019 23:32
Ostatni post: Ajgor
  Programowanie Batch (CMD) Informatyk2019 0 5549 11.12.2019 18:30
Ostatni post: Informatyk2019
  [JavaScript] Znajdowanie przedziału czasu rafal12999 0 2517 10.12.2019 17:58
Ostatni post: rafal12999
  Przekazywanie wskaźnika przez referencję w Qt Trojan3000 3 13441 10.12.2019 13:16
Ostatni post: Ajgor
  Proszę o pomoc w uzupełnieniu ankiety dt. Zawodu Programisty MaleMonki 0 3039 17.11.2019 12:47
Ostatni post: MaleMonki