Tworzenie wielu komponentów ramek i przycisków

Odpowiedz Nowy wątek
2015-01-01 16:29
0

Potrzebuje wyjasnienia w pewnej kwestii jestem świeży a próbuje zrozumiec mechanizm.
Java opiera sie na obiektach stworzonych w poszczegolnych klasach i klasie ktora to wszystko obsługuje main.
Stworzyłem trzy klasy:

1.Klasa Grafika - chcę w tej klasie tworzyc nowe obiekty ramki,przyciski i łączyc je.
Mam tu stworzona ramke i przycisk ktorych szczegolowe info znajduje sie w poszczegolnych klasach.

package click;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Grafika 
{
JFrame ramka1;
JButton p1;
 
public void TworzGrafika1()
{
JFrame ramka1 = new JFrame();
JButton p1 = new JButton();
}    
 
}

2.Klasa Ramki - w tej klasie chce przechowywac informacje o dostepnych ramkach ktorych moge uzyc w klasie Grafika.

package click;
import java.awt.Color;
import javax.swing.JFrame;
public class Ramki extends Grafika
{
public Ramki()
{
ramka1.setSize(200, 200);
ramka1.setTitle("Ramka");
ramka1.setVisible(true);
ramka1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    
}
}

3.Klasa Przyciski - w tej klasie chce przechowywac informacje o dostepnych przyciskach ktorych moge uzyc w klasie Grafika.

package click;
import java.awt.Color;
import javax.swing.JButton;
public class Przyciski extends Grafika
{
public Przyciski()
{
p1.setSize(50, 30);
p1.setBackground(Color.red);
}
}

Wiem, że tu jest mocno namieszane dlatego prosze o podpowiedz. Chodzi o to ze nie chce tworzyc 20 ramek i 30 przyciskow w klasie main. Potrzebuje info w jaki sposob odwolywac sie do ramek i innych komponentow.
Czy mozna uzyc tutaj static przy kazdym obiekcie, czy jest jakis lepszy sposob.

Jeszcze jeden wątek z tytułem przypominającym googlowską frazę zobaczę, a poleci od razu do kosza; Tytuł ma być sensownym i krótkim opisem poruszanego problemu, a nie kupą słów kluczowych; Jak przez cztery lata nie dowiedziałeś się jeszcze jak poprawnie tytułować wątki, to zaglądnij do tego artykułu - Jak tytułować wątki na forum? - furious programming 2015-01-01 18:36

Pozostało 580 znaków

2015-01-01 16:54
garai_nz
0

Kod, który pokazałeś nie jest pomieszany, jest CAŁKOWICIE bez sensu, więc analiza kodu jest bezcelowa.
Jeszcze raz Ci polecam, abyś przeczytał jakiś tutorial do Javy a potem do Swinga.

Hint: Z reguły tworzysz jedną ramkę, w której dodajesz/wymieniasz panele, które to posiadają inne komponenty np. przyciski, combo itd.

Pozostało 580 znaków

2015-01-01 17:43
garai_nz
0

Tutaj masz prosty przykład. Można to zrobić na wiele sposobów.

Tworzysz sobie jeden panel z komponentami

 
package mytest;
 
import javax.swing.JComboBox;
import javax.swing.JPanel;
 
public class MyBottomPanel extends JPanel {
 
    private JComboBox comboBox;
 
    public MyBottomPanel() {
        this.comboBox = new JComboBox(new String[]{"AAA", "BBB", "CCC"});
        add(this.comboBox);
    }
 
}

Tworzysz sobie drugi panel z kompnentami

 
package mytest;
 
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextField;
 
public class MyUpperPanel extends JPanel {
 
    private JButton button;
    private JTextField textField;
 
    public MyUpperPanel() {
        this.button = new JButton();
        this.textField = new JTextField();
        setUp();
    }
 
    private void setUp(){
        button.setPreferredSize(new Dimension(20, 20));
        textField.setPreferredSize(new Dimension(50, 20));
        setLayout(new FlowLayout());
        add(this.button);
        add(this.textField);
    }
 
}
 

Wrzucasz panele do frame

package mytest;
 
import java.awt.BorderLayout;
import javax.swing.JFrame;
 
public class MyFrame extends JFrame {
 
    private MyUpperPanel myUpperPanel;
    private MyBottomPanel myBottomPanel;
 
    public MyFrame() {
        this.myUpperPanel = new MyUpperPanel();
        this.myBottomPanel = new MyBottomPanel();
 
        add(myUpperPanel, BorderLayout.NORTH);
        add(myBottomPanel, BorderLayout.SOUTH);
 
        setSize(200, 200);
        setTitle("Ramka");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
 
}
 

i tworzysz obiekt frame w wątku EDT

 
package mytest;
 
import javax.swing.SwingUtilities;
 
public class Mytest {
 
    public static void main(String[] args) {
 
        SwingUtilities.invokeLater(new Runnable() {
 
            @Override
            public void run() {
                new MyFrame().setVisible(true);
            }
        });
 
    }
 
}
 
edytowany 1x, ostatnio: bogdans, 2016-12-13 18:26

Pozostało 580 znaków

2015-01-01 18:25
0

Dzieki wlasnie o to mi chodziło. Ja chciałem tworzyc worek z gotowymi przyciskami,worek z listami,checkboxami itd a pozniej mieszac to ze sobą umieszczajac w ramce ale gotowe panele są chyba przyjemniejszym rozwiazaniem.

Pozostało 580 znaków

2015-01-01 18:39
garai_nz
0

Wszystko zależy co chcesz robić. Oczywiście możesz tworzyć własne komponenty rozszerzając Swinga, np. jeżeli chcesz aby wszystkie Twoje buttony wyglądały tak samo i wtedy zamiast JButton do paneli będziesz dodawał MyJButton. Z drugiej strony możesz też stworzyć kolekcje obiektów np. gdy tworzysz kalkulator nie musisz powtarzać kodu(inicjowania obiektu, rozmieszczenia go, dodania listenera) dla każdego przycisku z cyfrą tylko iterujesz się po kolekcji.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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