Problem z dzieleniem tabeli.

0

Sprawa wygląda tak: mam sobie array liste do obiektów w których są dwie wartości nazwa i miasto.
Dane pobieram z array listy i umieszczam w tabelce. Jednak potrafie zrobić tylko w ten sposób ze dane z obiektu trafiają do jednej tylko kolumny. (ądz jak podzile tabelke na 2 to itak jest to 2 x ta sama kolumna). Chciałbym mieć 2 kolumny do których będa wczytane obiekty w koumnie w atrybut nazwa w 2 miasto. Jednak nie moge dać sobie z tym rady Prosze o pomoc

Tu mam kod tabelki:

class ModelTabelki extends AbstractTableModel
{
Object[][] data;
Object[] naglowek;
public ModelTabelki(Object[][] dat, Object[] nag)
{
data = dat;
naglowek = nag;
}
public int getColumnCount()
{
if(naglowek!=null)
return naglowek.length;
return 0;
}
public int getRowCount()
{
if(data!=null)
return data.length;
return 0;
}
public String getColumnName(int col)
{
return naglowek[col].toString();
}
public Object getValueAt(int row, int col) {
return data[row][col];
}
}

A tu tabelki w wczytywania do niej danych:

public class Okno_personel extends JFrame implements ActionListener,WindowListener
{
JFrame frame = new JFrame("Personel");
JPanel panel = new JPanel();
String[] nag={"Imie Nazwisko:"};
JTable table = new JTable();
JScrollPane js = new JScrollPane();

personnel = new ArrayList<pracownik>(EmployeeListDecorator.readList(fileName));
panel = new JPanel();

String[][] dane=new String[personnel.size()][2];              //<--- wczytywanie danych
 for (int i=0;i<personnel.size();i++)
     for (int j=0;j<1;j++)
         dane[i][j]=personnel.get(i)._imie;

ModelTabelki model = new ModelTabelki( dane, nag );
table = new JTable(model);
js = new JScrollPane( table );
js.setBounds(10, 70, 460, 180); //szerokosc, długość
panel.add(js);
frame.setSize(500,300);
frame.add(panel);
panel.setLayout(null); //Wyłancza automatyczne ustawianei komponentów
frame.setVisible(true);
frame.setLocationRelativeTo(null);
}

Będe wdzięczny za każdą wskazowke ;)

0

Przypatrz się którym wymiarem operujesz dla wierszy, a którym dla kolumn. Wydaje mi się, że tworzysz tabelkę z zamienionymi wierszami i kolumnami.
Po drugie zamiast dwuelementowej tablicy nagłówków wstawiasz tablicę jednoelementową z napisami w jednym Stringu. Wydaje mi się, że nie taka była Twoja intencja. Może to zadziałać tak, że skoro podajesz jeden element jako kolumny, to i w ModeluTabelki otrzymasz tablicę jednokolumnową.
Po trzecie to co opisałeś w komentarzu przez "wczytywanie danych", to co to jest? Konstruktor to nie jest, inicjator pól też nie bo powinien być w klamrach. Czy ten kod w ogóle Ci się kompiluje?

Poza tym dodałbym jeszcze kilka uwag:

  1. W modelu danych zawsze używaj danych tego typu, który faktycznie się tam znajduje. Pozostawianie bazowego Object, to furtka do błędów bo wstępnie pasuje tam wszystko. To podobny problem jak wskaźniki void* w C i C++. To nic, że w konstruktorze możesz mieć wymuszony typ obiektów Object. Twoim zadaniem jest sprawdzić czy pobierane dane są faktycznie tego typu jak oczekiwany i czy nie zawierają ewidentnych śmieci. Dane powinny zostać skonwertowane do typu potomnego, po to, żeby łatwo nimi operować w modelu, nawet jeżeli wyjście znowu będzie w Object. Inaczej trzeba robić ciągłe konwersje przy każdym dostępie do nich w czasie obliczeń.
  2. Iterując po tablicach nigdy nie wstawiaj żadnych sztywnych liczb w kodzie. Rozmiary poszczególnych tabel są zapisane w Javie w polu tablicy w nich samych (tablice są obiektami) i należy się tym kierować.
  3. Najgorszą techniką jest usuwanie layoutu i bawienie się w wpisywanie liczb określających rozmieszczenie. Taki kod załamuje się po praktycznie każdej zmianie czy to w danych czy w kupie innych powiązanych elementów w GUI. Używaj choćby najprostszego menedżera układu i naucz się go (np. GridBagLayout). Wyjdziesz na tym zawsze lepiej niż na bawieniu się w pikselki. Dzisiaj nawet stron Web nie ustawia się pikselami bo taka technika jest bardzo błędotwórcza i zwyczajnie pracochłonna.

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