Przełączanie między panelami

Przełączanie między panelami
BO
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 9 lat
  • Postów:99
0

Witam,
Mam stworzone jedno okno i dwa panele, jak w javie z pierwszego panelu mogę przełączyć się na drugi?

edytowany 1x, ostatnio: Bohun
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

Bardzo nieprecyzyjny opis problemu. Te dwa panele są widoczne, co w takiej sytuacji znaczy słowo przełączyć? Widać tylko jeden z nich, a chcesz pokazać ten drugi a pierwszy ukryć?


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
BO
tak chcę ukryć pierwszy i wyświetlić drugi. Teraz mam dodany pierwszy panel w konstruktorze okna JFrame.
BO
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 9 lat
  • Postów:99
0

Tak wygląda klasa okna

Kopiuj
public class Main extends JFrame {
    Main(){
        setSize(600, 480);
        setResizable(false);
        setTitle("Java Gamae");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        add(new MainPanel());        // ten jest widoczny
        //add(new OptionPanel());   // na ten chcę przełączyc
    }

    public static void main(String[] args) {
	Main window = new Main();
        window.show();
    }
}
edytowany 3x, ostatnio: Bohun
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

Jeśli masz rozkład BorderLayout, (a tak sugeruje zamieszczony kod), to

Kopiuj
add(new OptionPanel());
validate();
repaint();

Przy okazji, metoda show() jest deprecated, zamień na setVisible(true).


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 1x, ostatnio: bogdans
BO
Ale gdzie to mam dodać? Bo ja chcę po kliknięciu na przycisk z pierwszego panelu, przełączyć się na drugi panel.
flowCRANE
@Bohun - zostaw w spokoju komentarze i kontynuuj dyskusję w postach;
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

W metodzie actionPerformed listenera podpiętego do przycisku.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
BO
nie działa tak, nic się nie dzieje
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

Ostatni raz odpowiadam na komentarz. Nie działa, bo źle napisałeś kod.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
BO
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 9 lat
  • Postów:99
0

Kod klasy okna w w niej mam widoczny panel z klasy MyPanel

Kopiuj
public class Main extends JFrame {
    Main(){
        setTitle("Java Gamae");
        setSize(600, 480);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setResizable(false);

        add(new OptionsPanel());
        add(new MyPanel());

        setVisible(true);
    }

    public static void main(String[] args) {
	Main window = new Main();
        window.setVisible(true);
    }
}

Klasy MyPanel z której widok chcę przełączyć na Jpanel z klasy OptionsPanel

Kopiuj
class MyPanel extends JPanel implements MouseListener, MouseMotionListener, KeyListener {
...

    public MyPanel() {
        addMouseListener(this);
        addMouseMotionListener(this);
        addKeyListener(this);
        initComponentM();
    }

    public void initComponentM(){
...
        XButton op = new XButton("Options");
        op.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent actionEvent) {
                add(new OptionPanel());
                validate();
                repaint();
                setVisible(true);

            }
        });
        op.setComponentPosition(200, 100);
        op.setComponentSize(200, 50);
        op.setFontSize(15);
        listComponentM.add(op);
...
    }

Co jest źle że nie nie zmienia mi widoki na panel z klasy OptionsPanel?

BO
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 9 lat
  • Postów:99
0

Da się w ogóle z JPanelu zmienić panel na drugi czy trzeba odwoływać się od klasy która dziedziczy z JFrame i z niej zmieniać panel na drugi?

edytowany 1x, ostatnio: Bohun
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0
Kopiuj
public class Main extends JFrame {
    MyPanel menuPanel = new MyPanel();
    Main(){
        setTitle("Java Gamae");
        setSize(600, 480);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setResizable(false);
 
        //add(new OptionsPanel());
        add(menuPanel);
 
        setVisible(true);
    }
 
    public static void main(String[] args) {
    Main window = new Main();
        window.setVisible(true);
    }
}
....
        XButton op = new XButton("Options");
        op.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent actionEvent) {
                remove(menuPanel); //tego brakowało, zapomniałem poprzednio
                add(new OptionPanel());
                validate();
                repaint();
                //setVisible(true);
 
            }
        });

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
BO
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 9 lat
  • Postów:99
0

Chyba nie rozumiesz o co mi chodzi. Nie mogę stworzyć przycisku w tej klasie co dziedziczy z JFrame. Mam napisane własne kontrolki które rysują się na
panelu MyPanel i tylko w tym panelu działają i mogą być tworzone. W klasie Main nie mogę tworzyć żadnych przycisków i w tym jest problem.
Ewentualni muszę wywołać jakąś funkcję w MyPanel i odwołująca sie do klasy Main i zmienić panel na drugi. A tak powyższy sposób nie działa...

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

O czym Ty piszesz? Ja przepisałem Twój kod i dodałem dwa wiersze: remove() i zapamiętanie referencji do panelu MyPanel. Przyciski są tworzone wg Twojego sposobu.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 1x, ostatnio: flowCRANE
BO
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 9 lat
  • Postów:99
0

To niby jak jam usunąć

Kopiuj
remove(menuPanel);

stworzony w klasie Main, z klasy MyPanel ?? Bo z tego co napisałeś to tak mam zrobic.

dodanie znacznika <code class="java"> - furious programming

edytowany 2x, ostatnio: flowCRANE
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

Sorry, czytałem Twój kod nieuważnie. Musiałbyś przekazać do klasy MyPanel (w konstruktorze) referencję do klasy Main - niech się ona nazywa mainFrame, a w obsłudze przycisku

Kopiuj
mainFrame.remove(menuPanel);
mainFrame.add(new OptionPanel());
mainFrame.validate();
mainFrame.repaint();

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
BO
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 9 lat
  • Postów:99
0

Nie bardzo rozumiem jak mam przekazać to referencję do do do klasy MyPanel.
Próbuję w taki sposób w konstruktorze klasy main

Kopiuj
   Main(){
...
        menuPanel = new MyPanel(this);
        add(menuPanel);
        setVisible(true);
...
    }

ale tak nie działa.

edytowany 2x, ostatnio: Bohun
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

Musisz zmodyfikować konstruktor klasy MyPanel i "odebrać" tę referencję.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
BO
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 9 lat
  • Postów:99
0

Konstruktor klasy wygląda tak

Kopiuj
MyPanel(Main menuPanel){
...
mainFrame.remove(menuPanel);
mainFrame.add(new OptionPanel());
mainFrame.validate();
mainFrame.repaint();
...
}

i wywala taki błąd
Error:(36, 18) java: variable menuPanel might not have been initialized

edytowany 1x, ostatnio: Bohun
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
1

Musisz zachować tą referencje w jakimś polu klasy


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
BO
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 9 lat
  • Postów:99
0

Znaczy co przypisać do innego obiektu klasy Main?

flowCRANE
Edytuj swoje posty zamiast tworzyć nowych, jeśli chcesz coś dodać;
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
0

Dodać składową typu Main w klasie MyPanel i podstawić przekazaną w konstruktorze wartość.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
BO
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 9 lat
  • Postów:99
0

Dobra wstawia mi drugi panel, ale obsługa klawiatury nie działa a jak zminimalizuje okno i ponownie otworze to działa dlaczego tak się dzieje?

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)