Заархивировано

Эта тема находится в архиве и закрыта для дальнейших ответов.

Silovik-Drish

Java

Рекомендуемые сообщения

Странно, что не нашел данной темы в этом разделе, вот решил внести свой вклад в форум, ибо сам сейчас изучаю сабж :)

Ну и вот решил спросить у олдфагов как реализовать связь между элементами интерфейса для доступа к файловой системе, чтобы получилось что-то наподобие

DriveListBox->DirListBox->FileListBox

Делаю в Нетбинс, сам пока нуб в яве, поэтому и спрашиваю у более продвинутых товарищей :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Цепляешь лиснеры на интересующие события и обновляешь модели всех интересующих компонентов. Как и везде. Специального компонента нет. Можно попробовать сделать через JTreeTable - где-то видел модель для файловой системы - толи в инете толи в JRE.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всем привет)

Вот на днях назрел еще один вопрос:

У меня имеются несколько типов отделов (Административный отдел и Учебный отдел) они являются наследниками класса Отдел, Также у меня есть класс Университет, в котором я создал список, содержащие объекты класса Отдел, смогу ли я в этот список накидать всех отделов (и Административных и Учебных, которые я создал в университете)?

И вот еще 1 вопрос: смогу ли я потом из этого списка доставать сведения, по связанным с каждым отделом объектам (студенты, преподаватели и административные работники) ?

Очень нужна ваша помощь :huh:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Всем привет)

Вот на днях назрел еще один вопрос:

У меня имеются несколько типов отделов (Административный отдел и Учебный отдел) они являются наследниками класса Отдел, Также у меня есть класс Университет, в котором я создал список, содержащие объекты класса Отдел, смогу ли я в этот список накидать всех отделов (и Административных и Учебных, которые я создал в университете)?

И вот еще 1 вопрос: смогу ли я потом из этого списка доставать сведения, по связанным с каждым отделом объектам (студенты, преподаватели и административные работники) ?

Очень нужна ваша помощь :huh:

3 лаба, да?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
3 лаба, да?

Ага , самая геморная

 

MpakV

 

А как лучше тогда сделать если мне нужны именно сведения (класс объекта, его методы) об объектах разных классов, хранящихся в одном списке.

Пробовал сделать поиск типа класса вот таким образом

public Class searchDepartment(String searchnameDep){


	for (Department a:admdepartments){
		if(searchnameDep.equals(a.NameDep)){
			return a.getClass();
		}
	}
	for (Department a:studepartments){
		if(searchnameDep.equals(a.NameDep)){
			return a.getClass();
		}
	}

	return null;
}

 

Вот тока что-то криво получилось у меня, получилось как будто я класс внутри класса объявил :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Смотри.

 

delme.png

 

К общим для всех отделах методам и полям(объявленным в классе Отдел) ты сможешь обращаться. На диаграме это метод getName(). А вот к конкретным методам из подклассов отделов уже нет. Это методы getA() и getB(). Значит первый выход такой - использовать суперкласс. Объявить и реализовать все что возможно в классе Отдел - тогда проблема отпадет. Но часто бывают случаи когда это не получается - ради этого и создают подклассы. Тогда есть еще варинты: 1 - если необходимо изменить поведение методов - перегружать методы,2 - если необходимо убрать реализацию в суперклассе сделав метод абстрактным.

Если же все это не помогает решить проблему то скорее всего тут ошибка в проектировании - в хорошо спроектированных системах такой потребности возникать не должно. Однако если все же возникает нужно преводить классы по фактическому типу использую либо instanceof, либо(что намного лучше) enum с типом.

 

delme2.png

 

public Class searchDepartment(String searchnameDep){


	for (Отдел a:отделы)
	{
		switch(a.getType())
		{
			case ТипОтдела.УчОтдел:
				 {
						УчебныйОтдел отделУ = (УчебныйОтдел)а;
						return отделУ.getA();
				 }
			case ТипОтдела.АдмОтдел:
				 {
						АдминистративныйОтдел отделА = (АдминистративныйОтдел)а;
						return отделА.getB();
				 }
			default:
						return null;
		}
	 }
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Смотри.

 

delme.png

 

К общим для всех отделах методам и полям(объявленным в классе Отдел) ты сможешь обращаться. На диаграме это метод getName(). А вот к конкретным методам из подклассов отделов уже нет. Это методы getA() и getB(). Значит первый выход такой - использовать суперкласс. Объявить и реализовать все что возможно в классе Отдел - тогда проблема отпадет. Но часто бывают случаи когда это не получается - ради этого и создают подклассы. Тогда есть еще варинты: 1 - если необходимо изменить поведение методов - перегружать методы,2 - если необходимо убрать реализацию в суперклассе сделав метод абстрактным.

Если же все это не помогает решить проблему то скорее всего тут ошибка в проектировании - в хорошо спроектированных системах такой потребности возникать не должно. Однако если все же возникает нужно преводить классы по фактическому типу использую либо instanceof, либо(что намного лучше) enum с типом.

 

delme2.png

 

 

Спасибо большое, как раз через instanceof я и сделал)

Вот

public class Univercity {

protected List<Department> departments = new ArrayList<Department>();

public void addDepartment(Department w) {
	departments.add(w);
}
public Univercity() {
	super();
}

public Department searchDepartment(String searchnameDep){


	for (Department a:departments){
		if(searchnameDep.equals(a.NameDep)){
			return a;
		}
	}
return null;
}

}

 

и вот еще в мейне

 

Department dpt = xy.searchDepartment("Деканат");
if (dpt != null) {
if (dpt instanceof StudyingDepartment) {
	StudyingDepartment st=(StudyingDepartment)dpt;
	Teacher abc=st.searchTeacher("Гоголь");
	abc.Salary=200000;
	System.out.println(abc.Surname+" "+abc.Name+" "+abc.LastName+" "+abc.Salary);
	FreeStudent abd=st.searchFStudent("Медведев");
	abd.Stipend=10000;
	System.out.println(abd.Surname+" "+abd.Name+" "+abd.LastName+" "+abd.Stipend);
}
if (dpt instanceof AdmDepartment) {
	AdmDepartment adm=(AdmDepartment)dpt;
	AdmWorker asdm=adm.searchAdmWorker("Иванов");
	asdm.Salary=34500;
	System.out.println(asdm.Surname+" "+asdm.Name+" "+asdm.LastName+" "+asdm.Salary);

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С Новым годом всех ява - программистов и не только11адинадин11

Вот щас сижу в творческих муках пишу курсач :)

Опять назревают разные вопросы:

1. Имеет ли смысл для файлового менеджера использовать компонент FileChooser или лучше сделать так как я в самом первом посте спрашивал (я планировал через раскрывающиеся списки делать, но мне посоветовали через JTreeTable делать (такого компонента я не нашел в нетбинсе там только отдельно есть Tree и отдельно Table))

2. Удобно ли мне будет через FileChooser реализовывать копирование, удаление, переименование файлов делать?

3. Подскажите как лучше реализовать открытие файлов соответствующими им программами по-умолчанию (док-вордом, ткст-блокнотом, и.т.д)

 

Заранее спасибо добрым людям! :D

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Люди, помогите аа я никак не могу засесеть за прогу, потому что не знаю какие элементы интерфейса из netbeans мне использовать :blink:

Я все-таки склоняюсь к JTree и JTable но я вообще без понятия как заполнять это дерево файловой системой не нашел ни1 годного описания свойств этого элемента интерфейса из нетбинс его свойств итд.

Подскажите, пожалуйста как заполнить дерево файловой системой (диски и папки) а таблицу самими файлами выбранной папки :huh:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пока делаю файловую систему через обычные списки и тут возникла проблема , мне нужно чтобы у меня во втором списке были только папки я написал для этого метод, но все равно прога при нем отказывается работать, работает нормально только без разделения на файлы и папки вот такой вот код

private void jList1ValueChanged(javax.swing.event.ListSelectionEvent evt) {
 String drive=jList1.getSelectedValue().toString();
	File drive1=new File(drive);
	File[] FList1=drive1.listFiles();
   // File[] FList11=null;
	//int k=0;
	//for (int i=0;i<FList1.length;i++){
	   // for (int j=k;j<FList1.length;j++){
		 //   Boolean a=FList1[j].isDirectory();
		   // if (a==true) {
			 //   FList11[i]=FList1[j];
			   // k=j;
			//}
		//}
   // }
	jList2.setListData(FList1);	  // TODO add your handling code here:
}

 

То что в комментариях вызывает проблемы, хотя по логике вроде бы верно, подскажите ошибки , люди 11адин

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поищи все же JTreeTable - он есть с 1.5. Немного сложен в использовании но самое оно для файлового дерева со списком файлов. В инете, кстати, много моделей к нему именно для фаловой системы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

MpakV, спасибо за помощь!

Вот щас делаю через JTree, проблема в том что я нкиак не могу связать код с интерфейсом, который я сам рисую в нетбинс, получается только когда форма и дерево прописывается в коде, что не совсем мне нужно :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Люди, вот я спраывился вроде бы с задачей построения нужного мне дерева файлов (небольшая оговорка, дерево строится, но появляется в отдельном окне, вместо того чтобы заполнять дерево , которое я перетащил ан форму нетбинс, ну да ладно это мелочи).

так вот теперь другая проблема мне нужно перетащить файлы из раскрытой ветви дерева в список.

написал следующий код, ява на него не ругается, но ничего не делает.

  String [] List2=null;
  jTextField1.setText(foo.getChildAt(1).toString());
for (int i=0;i<foo.getChildCount();i++){
	   List2[i]=foo.getChildAt(i).toString(); //jTable1
	}
  jList1.setListData(List2);

Тут можно сделать пояснение, что foo-это корневой каталог дерева

JFrame jf = new JFrame();
File[] froots = File.listRoots();
DefaultMutableTreeNode foo=new DefaultMutableTreeNode(jComboBox1.getSelectedItem().toString());

File froot =new File(jComboBox1.getSelectedItem().toString());
DefaultMutableTreeNode mroot = new DefaultMutableTreeNode(froot);
foo.add(mroot);
addChildrensToNode(0, mroot, froot);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты