Wywołanie klasy w nowym JFrame

0

Witam. Tworząc swoją pierwszą aplikację natknąłem się na pewien problem (z pewnością banalny). Otóż chciałem utworzyć tablicę do której będą przypisywane wartości buttonów z poszczególnych JFrame (pierwszy JFrame tablica[0], drugi JFrame tablica[1], itd.). Utworzyłem klasę

 public class Tablicatest {
    public void main(String[] args) {
        String[] odpowiedzi = new String[2];
    }
}

i niestety nie wiem w jaki sposób ją wywołać i przypisać do niej wartości uzyskaną z

wartosc.getText();

w JFrame. Z góry zaznaczam, że próbowałem znaleźć odpowiedź w google, ale niestety przekracza to moje zdolności poznawcze.

0

Odpowiadając na Twoje pierwsze pytanie - zainteresuj się na początku koncepcją MVC (Data Model, View, Controller). A co by nie rzucać myślowymi linkami, to powiem w kilku słowach o co chodzi. Powinieneś odseparować od siebie definicje obiektów (klasy), które mają pełnić rolę magazynu i rafinerii danych (Data Model), od obiektów prezentujących interfejs użytkownika (View) oraz obiektów pośredniczących między użytkownikiem a widokiem (Controller).

Dostosowując teraz to, co napisałem do Twojego pytania. Załóżmy, że masz 5 klas implementujących JFrame'y. Każdy z tych JFrame'ów ma posiadać po pięć JButtonów. Tworzysz więc oddzielną klasę (np. "public class DataStorage"), która będzie pełniła rolę magazynu danych. W jej ciele definiujesz wspomnianą przez siebie tablicę - na pierwszy rzut oka wydaje się, że dwuwymiarową (jeżeli zależy Ci wyłącznie na przechowywaniu reprezentacji obiektów klasy JButton), a w jej (klasy) konstruktorze implementujesz jej inicjalizację. Następnie definiujesz metody do ustawiania oraz pobierania wartości z tablicy. Dalej już tylko po prostu tworzysz obiekt klasy DataStorage w klasie pośredniczącej między danymi, a widokiem i voila. Może to wyglądać w wieeeelkim skrócie jak poniżej:

import java.awt.Component;
import javax.swing.JButton;

public class DataStorage {

     private Component[][] table;
     
     DataStorage(int x, int y) {
          table = new Component[x][y];
     }
     
     public void setTableItem(JButton button, int i, int j) {
          table[i][j] = button;
     }
     
     public Component getTableItem(int i, int j) {
          return table[i][j];
     }
}

...oraz...

import javax.swing.JButton;

public class Controller {
     
     private static DataStorage dataStorage;
     
     private static JButton button_1;
     private static JButton button_2;
     
     public static void main(String args[]) {
          
          // Inicjalizujemy (tworzymy) obiekt klasy DataStorage
          dataStorage = new DataStorage(5, 5);
          
          // Ustawiamy przykładowy JButton dla niby'pierwszego JFrame'a
          dataStorage.setTableItem(button_1, 0, 0);
          
          // Ustawiamy przykładowy JButton dla niby'drugiego JFrame'a
          dataStorage.setTableItem(button_2, 1, 0);
          
          /*
           * ... itd. Nic nie stoi jednak na przeszkodzie, byś w klasie Controller inicjalizował
           * inne klasy zawierające np. definicje JFrame, czy JButton. Następnie po prostu dodajesz
           * utworzone elementy do odpowiednich tablic. Pamiętaj, że nie powinno tworzyć się
           * klas "kombajnów". Lepiej mieć ich wiele, ale z mniejszą ilością kodu w nich zawartych.
           * Dzięki temu będzie Ci o wiele łatwiej pracować z tworzoną aplikacją. Lepiej zacząć
           * praktykować tą sztukę od samego początku :)
           */
     }
}

A poniżej masz odpowiedź na pytanie drugie.

public class Tablica {
          
     private JButton wartosc;
          
     public static void main(String args[]) {

          String[] odpowiedzi = new String[2];
               
          wartosc = new JButton("666");
               
          odpowiedzi[0] = wartosc.getText();
     }
}

Pozdrawiam serdecznie!

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