Ustawienie JPanel w innym JPanel z absolutnym pozycjowaniem

0

No wiec mam duzy JPanel. Ma 800x600px. W nim chcialbym ustawic inny JPanel o wymiarach 200x100px, oddalony od duzego JPanela o 20px od gornej i lewej granicy. Do tego ustawiony bylby absolutnie. Jak ruszam duzym oknem to ten panel w srodku ruszałby sie wraz z duzym oknem ale w oknie nie zmieniałby pozycji. Czy ktos moglby mi podac kawałek kodu ktory utworzylby takie cos? Probowalem juz tworzyc osobna klase JPanel, dodawac ja, zmieniac layout na null ale mi nie wychodzi. Tak wiec prosiłbym o gotowy kod. Dziekuje

0

W nim chcialbym ustawic inny JPanel o wymiarach 200x100px, oddalony od duzego JPanela

To się kupy nie trzyma. Jeżeli chcesz mały panel umieścić w dużym, to zrób tak:

dużyPanel.setLayout(null);
malyPanel.setBounds(20,20,200,100);
duzyPanel.add(malyPanel);
0
bogdans napisał(a):

W nim chcialbym ustawic inny JPanel o wymiarach 200x100px, oddalony od duzego JPanela

To się kupy nie trzyma. Jeżeli chcesz mały panel umieścić w dużym, to zrób tak:

dużyPanel.setLayout(null);
malyPanel.setBounds(20,20,200,100);
duzyPanel.add(malyPanel);
  1. Czemu nie trzyma sie kupy? :( Mam duzy panel w ktorym jest wiekszosc akcji. A małe panele sa po prostu paskami narzedzi. Wiem ze moglem uzyc klasy JToolbox ale z pewnym wzgledow mi ona nie pasowała.
  2. Probowalem tak i nie dziala. Kod w duzym panelu wygladał tak jak napisales, a w małym panelu byl taki:
public malyPanel() {
 setPreferredSize(new Dimension(200, 100));
}

public void paint(Graphics g) {
Graphics 2D g2 = (Graphics2D)g;
g2.fill(new Rectangle2D.Float(0, 0, 200, 100);
}

No i nic sie nie dzialo, w ogole nie ma tego panelu. Probowalem tez bezposrednio wykonac na nim metode repaint z poziomu duzego panelu i cały czas byl jakby przezroczysty. A wlasciwie to wyglada tak jakby ten JPanel mial caly czas wymiary 0x0. Bo jak np. dodam JButton to ten JButton jest, ale JPanel mawymiary 30x10 czyli minimalnie takie by tego buttona zmiescic.

0
  1. To się nie trzyma kupy językowo, nie może jednocześnie być mały panel w dużym, i być od niego oddalonym.
  2. Narysuj ten prostokąt innym kolorem, to go zobaczysz.
0
bogdans napisał(a):
  1. To się nie trzyma kupy językowo, nie może jednocześnie być mały panel w dużym, i być od niego oddalonym.
  2. Narysuj ten prostokąt innym kolorem, to go zobaczysz.
  1. Przeciez wiadomo o co chodzi. Maly panel w srodku duzego oddalony od niego o 20px wewnatrz. Tak jak padding w css zreszta.
  2. To zabrzmiało jakbys mnie brał za półgłówka szczerze mowiac. Jakbym rysował prostokat tym samym kolorem co tło i dlatego go nie widze. Ale kolory sa inne. Mam na razie taki kod:
public MainPanel() {
        setLayout(null);
        mapView.setBounds(20, 20, 200, 100);
        add(mapView);
        ...

public class MapViewPanel extends JPanel {
    public MapViewPanel() {
        setPreferredSize(new Dimension(200, 100));
        System.out.println(getSize()); // <-- zwraca 0 0
    }
    
    @Override
    public void paint(Graphics g) {
        Graphics2D g2 = (Graphics2D)g;
        g2.setColor(Color.RED);
        g2.fill(new Rectangle2D.Float(0, 0, 200, 100));
    }
}

Jak widac rozmiar tego panelu to 0 i 0 mimo ze ustawiam go i w mainPanel i w konstruktorze.

0
  1. Ty masz opisać problem tak, żeby nie trzeba było się domyślać o co chodzi.
  2. Niczego nie sugerowałem, w kodzie który zamieściłeś nie ma zmiany koloru. Jak masz problem, to wysyłaj kod, który nie działa, a nie swobodne wariacje na temat niedziałającego kodu.
  3. getSize() w konstruktorze zawsze zwraca zero, dodaj wywołanie getSize() do metody paint().
  4. Nie widać żebyś w MainPanel ustawiał rozmiar małego panelu, nie wiadomo jaki jest związek mapWiew z małym panelem.
0
bogdans napisał(a):

getSize() w konstruktorze zawsze zwraca zero

Hm, no to by wiele wyjaśniało. W takim razie jak powinien wyglądac moj kod aby po utworzeniu panelu namalował mi ten prostokat? Bo dodanie

mapView.repaint();

po add(mapView) nic nie robi.
Za to jesli dodam tam przycisk ktory po wcisnieciu wywołuje repaint() to prostokat sie namaluje...

1 użytkowników online, w tym zalogowanych: 0, gości: 1