Страница 1 из 1

Массив элементов разных классов

Добавлено: 10 май 2006, 17:46
keo
На основании класса JPanel я сделал несколько своих классов. Теперь мне нужно создать массив, элементами которого мог бы быть любой из классов.

Код: Выделить всё

// Классы
public class TextPanel extends JPanel {}
public class DatePanel extends JPanel {}
public class LinkPanel extends JPanel {}

// Заполнение
Mas[1]=new TextPanel();
Mas[2]=new DatePanel();
Mas[3]=new LinkPanel();
Mas[4]=new TextPanel();
Как объявить массив чтобы работало - не знаю

Как сделать такое и вообще можно ли?

Добавлено: 10 май 2006, 19:34
Chester
Можно, попробуй ArrayList :)

Добавлено: 10 май 2006, 19:57
Oscar
keo, мда, ну в общем, как Chester сказал:

Код: Выделить всё

import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.JPanel;

public class TestArray {
	
	class TextPanel extends JPanel {}
	class DatePanel extends JPanel {}
	class LinkPanel extends JPanel {}
	
	ArrayList<JPanel> panels = new ArrayList<JPanel>();
	
	public TestArray() {
		
		panels.add(new TextPanel());
		panels.add(new DatePanel());
		panels.add(new LinkPanel());
	}

	public String toString2() {
		
		String toReturn = "";
		
		for(int i = 0; i < panels.size(); i++) {
			toReturn += panels.get(i).getName() + "\n";
		}
		
		return toReturn;
	}
	
	public String toString() {
		
		String toReturn = "";
		
		for(Iterator<JPanel> i = panels.iterator(); i.hasNext();) {
			toReturn += i.next().getName() + "\n";
		}
		
		return toReturn;
	}

	public static void main(String[] args) {

		new TestArray();
		
	}

}
(c) java.util.ArrayList

Если Java младше 1.5, то <JPanel> нужно убрать и и кастовать элементы при обращении к ним:

Код: Выделить всё

TextPanel textPanel = (TextPanel)panels.get(0);

Добавлено: 10 май 2006, 21:24
keo
Спасибо! Буду пробовать.

Добавлено: 11 май 2006, 00:51
keo
Спасибо за помощь! ArrayList - именно то что надо.
Жаль только у меня Java 1.4 попробовать как работает с <JPanel> не получилось...