Komponenty swing - czego użyć?

0

Niedawno skoczyłem przerabiać podstawy biblioteki swing i pojawił mi się pewien problem. Chcę napisać aplikację okienkową (tak, to musi być w javie), ale nie wiem dokładnie czego do tego użyć i trochę ciężko mi wyjaśnić co chcę osiągnąć, no ale:
mamy okienko główne z menu na górze i listą (JList) zajmującą 1/4 szerokości po prawej stronie tego okna, coś takiego:
f722dfb729.png

Po kliknięciu dodaj, wyskakuje nam dodatkowe okienko a w nim jakaś lista oraz miejsce na nazwę, wpisujemy nazwę klikamy ok i dodajemy nasz nowy twór na listę. I tutaj pojawia się problem, gdyż chcę aby po kliknięciu np. dwa razy, albo raz, ew. po zaznaczeniu czegoś na liście i kliknięciu dodatkowego buttona, w miejscu gdzie jest "Z" pojawiło się tak jakby nowe okno, gdzie możemy wstawiać kolejne różne komponenty. Tylko ja nie chcę nowego okna, tylko jakby to nazwać... "płytę" w miejscu Z? Żeby ta JLista po prawej stronie została i pozwalała nam się przełączać między tymi "oknami". I tu się pojawiam moje pytanie czego mam użyć, jak to mniej więcej zrobić, jakaś wskazówka?

EDIT:

Jak tak sobie myślę to w takim super uproszczeniu chcę uzyskać podobny efekt do tego co widzimy jak włączamy np. mój komputer czy dowolny katalog i po lewej stronie mamy drzewko dzięki któremu możemy się przełączać pomiędzy oknami, ale główny "trzon" wraz z drzewkiem zostaje na miejscu.
cfa8d18ac9.png
Oczywiście zamiast wyboru folderów w oknie głównym (u mnie Z) byłoby coś innego, ale koncept drzewka podobny.
Tylko, że ja chciałbym zamiast drzewa listę, do której można dodać elementy.

1

Do takich zastosowań powstał między innymi CardLayout. Tutaj możesz sobie o nim poczytać i wykorzystać w kodzie: CardLayout

EDIT 00:19

A tu masz demo:

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JSplitPane;
import javax.swing.SwingConstants;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class ForumDemo extends JFrame {

	private JPanel layout;
	private CardLayout cardLayout = new CardLayout();

	ForumDemo() {
		
		/* layout */
		JSplitPane splitpane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
		
		layout = new JPanel(cardLayout);
		splitpane.add(layout, JSplitPane.LEFT);
		splitpane.setDividerLocation(150);
		
		/* layout -> left */
		layout.add(new JPanelCustom("One"), "One");
		layout.add(new JPanelCustom("Two"), "Two");
		
		/* layout -> right */
		String[] items = new String[] {"One", "Two"};
		JList<String> list = new JList<String>(items);
		list.addListSelectionListener(new ListSelectionListener() {
			@Override
			public void valueChanged(ListSelectionEvent lse) {
				cardLayout.show(layout, list.getSelectedValue());
			}
		});
		splitpane.add(list, JSplitPane.RIGHT);
		
		/* add items to the jframe */
		this.getContentPane().setLayout(new BorderLayout());
		this.getContentPane().add(splitpane, BorderLayout.CENTER);
		this.pack();
		this.setSize(300, 300);
	}
	
	public class JPanelCustom extends JPanel {
		JPanelCustom(String title) {
			super();
			
			this.setLayout(new BorderLayout());
			
			JLabel label = new JLabel(title);
			label.setHorizontalAlignment(SwingConstants.CENTER);
			
			this.add(label, BorderLayout.CENTER);
		}
	}
	
	public static void main(String args[]) {
		EventQueue.invokeLater(new Runnable() {
			@Override
			public void run() {
				ForumDemo window = new ForumDemo();
				window.setVisible(true);
			}
		});
	}
}

vvvv.jpg

0

Bardzo dziękuję, właśnie o to mi chodziło :)

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