у меня есть hashMap, который я хотел бы, чтобы его данные были просмотрены в JTable, как когда-либо я испытываю затруднения при получении hashMap суммы столбцов и строк, и данные, чтобы быть displayed.i имеют hashmap, который берет считавший в качестве ключа и объекта студентов, в которых каждый у студентов есть свои данные как имя, идентификатор, возраст, etc.however обращающийся к документам JTable, это говорит, что мне был бы нужен ints для строки и столбца и массива мультиразмера текстового объекта. как я могу сделать это? я могу изменить свой hashMap в массив multidimenion?
- Редактирование я отредактировал свой вопрос, таким образом, это могло быть более ясно, я довольно плохо знаком с Java, я действительно не получаю то, что отправили некоторые из Вас, тем более, что работа, которую я делаю, вполне связана с OO и схватыванием, что понятия OO являются моей самой сложной задачей,
/I имейте dataStorage класс, зарегистрированный пользователь добавляется к HashMap с Ключевым входом его Имени пользователя, которое является getUser./
import java.util.*;
public class DataStorage
{
HashMap<String, Student> students = new HashMap<String, Student>();
HashMap<String, Staff> staffMembers = new HashMap<String, Staff>();
//Default constructor
public DataStorage(){
}
public void addStaffMember(Staff aAcc)
{
staffMembers.put(aAcc.getUser(),aAcc);
}
public void addStudentMember(Student aAcc)
{
students.put(aAcc.getUser(),aAcc);
}
public Staff getStaffMember(String user)
{
return staffMembers.get(user);
}
public Student getStudent(String user)
{
return students.get(user);
}
public int getStudentRows()
{
return students.size();
}
}
/ **** Это - студенческий класс, который расширяет Учетную запись ***/
public class Student extends Account {
private String studentNRIC;
private String diploma;
private String gender;
private double level;
private int credits;
private int age;
private boolean partTime;
private boolean havePc;
private boolean haveChild;
public Student(String n, String nr, String id, String dep, String user, String pass)
{
super(n, dep, user, pass, id);
studentNRIC = nr;
}
public void setPartTime(boolean state)
{
if(state == true)
{
partTime = true;
}
else
{
partTime = false;
}
}
public boolean getPartTime()
{
return partTime;
}
public void setHavePc(boolean state)
{
if(state == true)
{
havePc = true;
}
else
{
havePc = false;
}
}
public boolean getHavePc()
{
return havePc;
}
public void setHaveChild(boolean state)
{
if(state == true)
{
haveChild = true;
}
else
{
haveChild = false;
}
}
public boolean getHaveChild()
{
return haveChild;
}
public void setDiploma(String dip)
{
diploma = dip;
}
public String getDiploma()
{
return diploma;
}
public void setCredits(String cre)
{
credits = Integer.parseInt(cre);
}
public int getCredits()
{
return credits;
}
public void setGender(String g)
{
gender = g;
}
public String getGender()
{
return gender;
}
public void setAge(String a)
{
age = Integer.parseInt(a);
}
public int getAge()
{
return age;
}
public void setLevel(String lvl)
{
level = Double.parseDouble(lvl);
}
public double getLevel()
{
return level;
}
public void setStudentNRIC(String nr)
{
studentNRIC = nr;
}
public String getStudentNRIC()
{
return studentNRIC;
}
}
/ **** Это - суперкласс Учетной записи ***/
public class Account {
private String name;
private String department;
private String username;
private String password;
private String accountID;
public Account()
{
}
public Account(String nm,String dep,String user,String pass, String accID)
{
name = nm;
department = dep;
username = user;
password = pass;
accountID = accID;
}
public void setName(String nm)
{
name = nm;
}
public String getName()
{
return name;
}
public void setDep(String d)
{
department = d;
}
public String getDep()
{
return department;
}
public void setUser(String u)
{
username = u;
}
public String getUser()
{
return username;
}
public void setPass(String p)
{
password = p;
}
public String getPass()
{
return password;
}
public void setAccID(String a)
{
accountID = a;
}
public String getAccID()
{
return accountID;
}
}
Если вы говорите, что наиболее популярными запросами являются временные рамки, Я бы рекомендовал идти с одним столбцом, который хранит время, как в вашем первом варианте .
Вы можете выбрать свою собственную эпоху для приложения, и работать оттуда.
Это должно упростить запросы, которые необходимо записать при поиске временных интервалов.
Также посмотрите на 10,3,1. Типы DATETIME, DATE и TIMESTAMP
-121--3165614-Однако микросекунды не могут быть сохранены в столбец любых временных данных напечатать. Любая микросекундная часть отказанный. Преобразование TIME или Значения DATETIME в числовую форму (для например, путем добавления + 0) результатов в двойное значение с микросекундной частью из .000000
use base qw(Horse Donkey);
Это примерно эквивалентно:
BEGIN {
require Horse;
require Donkey;
push @ISA, qw(Horse Donkey);
}
Более точно, если вам нужно загрузить код модулей, а также наследовать от них. BTW, есть проблемы с множественным наследованием, но это другой вопрос:)
Изменить: Compile-time v-run-time преимущества:
Если вы хотите использовать данный модуль во время выполнения, вы можете протестировать и добавить модуль к родителям:
if (eval {request X}) { push @ ISA, 'X'; }
Здесь доступно несколько опций . Возможно, я построю свою собственную TaureModel
и преобразую HashMap
в список, но для этого потребуется, чтобы accountID
был частью Student, и я не могу сказать, является ли он из вашего поста. Для этого необходимо исследовать каждый объект в HashMap
и для этого использовать "цикл".
Сначала создайте массив для хранения данных:
Object[][] tableData = new Object[students.keySet().size()][numberOfColumns];
Замените numberOfColumns количеством столбцов в таблице.
int index = 0;
for (String key : students.keySet())
{
Student student = students.get(key);
tableData[index][0] = student.getXXX
tableData[index][1] = student.getYYY
tableData[index][2] = student.getZZZ
// and so forth
index++;
}
То, что мы делаем здесь, это создать цикл, который будет исследовать каждый ключ в студентов HashMap и с помощью этого ключа мы получаем объект Student и заполнить массив правильными данными.
Это ответ на ваш вопрос, но я бы рекомендовал вам взглянуть на интерфейс TaureModel и построить его вокруг вашей HashMap студентов. Более мужественно:)
Почему бы не создать объект, который реализует интерфейс в стиле, который желает JTable (массив Object
), и обеспечивает мост к вашей существующей карте студентов? Таким образом, вы можете сохранить существующую структуру данных, которая явно работает для вас, и вы просто предоставляете адаптер для удобства представления (JTable).
По ссылке:
Адаптер позволяет классам работать вместе, что обычно не могло из-за несовместимых интерфейсов, предоставляя свой интерфейс клиентам {{1 }} при использовании исходного интерфейса. Адаптер преобразует вызовы своего интерфейса в вызовы исходного интерфейса , а объем кода , необходимый для выполнения обычно это мало. Адаптер также отвечает за преобразование данных в соответствующие формы.
Я бы попробовал , а не , чтобы изменить структуру рабочих данных, чтобы она соответствовала определенному компоненту графического интерфейса (что произойдет, если на более позднем этапе вы захотите отобразить через HTML или подобное), но адаптировать к каждому представлению как возникает требование.
Это можно сделать с помощью реализация интерфейса TableModel
для реестра студентов (также известного как SortedMap). TableModel
- это табличная модель, представляющая, как Swing JTable ожидает свои данные. Интерфейс TableModel
обеспечивает полную гибкость предоставления этих данных.
Как только эта реализация создана, создание JTable
происходит прямо:
// As StudentRegistration class
new JTable(new StudentTableModel(studentRegistration));
// Or as SortedMap<String, Student>
new JTable(new StudentTableModel(students));
В этом сценарии я ожидаю, что простой SortedMap
напрямую не задан, но экземпляр StudentRegistration
, который содержит подобную SortedMap
.
/**
* Models the {@link Student} entries as a Swing TableModel.
*/
final public class StudentTableModel implements TableModel {
/** The TableModel column names. */
public final String columnNames[] =
new String[] {
"Name", "Identification", "Age"
};
/** The list of TableModelListeners. */
private final ArrayList<TableModelListener> tableModelListenerList = new ArrayList<TableModelListener>();
/** The manager containing all the Student instances. */
private final StudentRegistration register;
public StudentTableModel(StudentRegistration register) {
super();
this.register = register;
}
public Class<?> getColumnClass(int columnIndex) {
return null;
}
public int getColumnCount() {
return columnNames.length;
}
public String getColumnName(int columnIndex) {
return (columnIndex < columnNames.length) ? columnNames[columnIndex] : null;
}
public int getRowCount() {
return register.getStudents().size();
}
public Object getValueAt(int rowIndex, int columnIndex) {
// One solution
String identification = register.getStudentIds().toArray()[rowIndex];
Student student = register.getStudent(identification);
// Other option
SortedMap<String, Student> studentMap = register.getStudents();
String[] studentIdArray = studentMap.keySet().toArray(new String[studentMap.keySet().size()]);
Student student = studentMap.get(studentIdArray[rowIndex]);
final Object result;
switch (columnIndex) {
case 0:
result = student.getName();
break;
case 1:
result = student.getIdentification();
break;
case 2:
result = student.getAge();
break;
default:
result = null;
}
return result;
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
public void setValueAt(Object value, int rowIndex, int columnIndex) {
// Just ignore, model is read only.
}
public void addTableModelListener(TableModelListener tml) {
if (! tableModelListenerList.contains(tml)) {
tableModelListenerList.add(tml);
}
}
public void removeTableModelListener(TableModelListener tml) {
tableModelListenerList.remove(tml);
}
}
PS: Этот пример частично взят из другой реализации, я просто обновил его для вашего сценария, как описано выше. Так что вполне возможно, что в нем есть какие-то блески кода. Он предназначен только для того, чтобы дать вам представление о том, как может выглядеть решение.
Скомпилированную библиотеку VB6 можно использовать в программе C # с помощью COM Interop.
https://stackoverflow.com/questions/tagged/interop
-121--2475331-Я думаю, что вы должны просто иметь возможность добавить библиотеку, которая содержит ваш тип VB6 в качестве ссылки в ваш проект C #. Visual Studio создаст сборку взаимодействия на лету, и вы получите доступ ко всем типам в библиотеке VB6 через Runtime Callable Wrappers .
Инструмент, который создает Interop Assembly является TLBIMP.EXE , и вы можете запустить его самостоятельно, если хотите больше контроля над процессом, например. если требуется создать основную сборку взаимодействия , которая может совместно использоваться несколькими управляемыми компонентами.
-121--2475330- Ваше хранилище данных
похоже на StudentRegistration
, используемый в образце кода.
// TIP: It can be handy to place the student in some order in the Map
// (therefore using the sorted map).
private SortedMap students = new TreeMap();
// QUESTION: Why not use argument name 'student'?
public void addStudentMember(Student aAcc)
{
students.put(aAcc.getUser(),aAcc);
}
// Updated implementation
public void addStudent(Student student)
{
students.put(student.getAccID(), student);
}
// QUESTION: Would a method name 'getNumberOfStudents' not be better?
public int getStudentRows()
Для меня немного неясно, почему Student
распространяется от Account
.
Идентификация счета, это уникальный идентификатор, через систему дыр? Все ли сотрудники (пользователи) и студенты (пользователи) имеют такую уникальную идентификацию? Где/кто их создает? Если не система сама, это никогда не может быть guranteed, что они также правильно войти в вашу систему. Даже при проверке уникальности системы помогает. Но кто сказал, что не кто-то другой (по акценту) использовал кого-то еще свой уникальный идентификатор? (Как создаются студенты и сотрудники (аккаунты)?
Если эти идентификаторы действительно уникальны, почему бы не использовать их для размещения ученика в SortedMap?
Если сортировка не важна. Почему бы просто не использовать список студентов?
Является ли параметр имени уникальным (по которому вы помещаете студента на Карту)?
Программирование - это не более чем изучение языка программирования. Как только вы поймете язык OO Java, хорошо прочитать несколько более общих книг по программированию. В вашем конкретном случае я бы сказал, начните с Domain Driven Design . Затем продолжите работу с такими книгами, как Test Driven Development , Refactoring to Patterns и Design Patterns .