Jak wyświetlić arrayliste zawierającą tablice stringów?

0

Jak to wyświetlić bo ja już nie mam pomysłu cały czas mi krzaki wyświetla:

public class Testy {
    public static void main(String[] args) {
    	
    
    	ArrayList <String[]> lista = new ArrayList<String[]>();
    	String[] lis={"Szymon","Karolina"};
    	
    	lista.add(lis);
    	lis[0]=null;
    	lis[1]=null;
    	
    	lis[0]="mama";
    	lis[1]="tata";
    	
    	lista.add(lis);
    	
    	System.out.println(lista.get(1).toString());
    }
} 
0
System.out.println(Arrays.toString(lista.get(1)));

Albo przy pomocy pętli for.

0

OK to jeszcze jedno pytanko. Jak zrobić żeby zapisać do Arraylisty te dane w taki sposób żeby były wyświetlane w ten sposób:
Szymon, Karolina
mama, tata

pytam się dlatego, ponieważ piszę aplikację na zajęcia i natrafiłem na problem mianowicie w mojej aplikacji będzie okno w którym po kliknięciu na przycisk dodaj produkt, produkt powinien pojawić się w tabeli w zadaniu zaznaczone jest, że informacje o produktach mają być przechowywane za pomocą kolekcji. I teraz nie wiem jak to zrobić, bo JTable ma konstruktor (Object[][], Object[]). I po utworzeniu nowego produktu(wraz z danymi musiałby on trafić do takiej tablicy Object[][]. Proszę o poradę wskazówkę. To kawałek kod okna z gdzie jest opcja dodaj produkt. Jest to program z wykorzystaniem RMI.
Kod Serwera:


import java.net.InetAddress;
import java.net.MalformedURLException;
import java.net.UnknownHostException;
import java.rmi.AlreadyBoundException;
import java.rmi.Naming;
import java.rmi.RMISecurityManager;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
import java.util.ArrayList;


public class SerwerRMI extends UnicastRemoteObject implements RMIInterface{
	
	String adres;
	int port =1099;
	
	
	public String[] kolumny={"ID","Nazwa","Producent","Ilosc"};
	String[][] dane;
	
	
	public SerwerRMI() throws RemoteException, UnknownHostException{
		super();
		String nazwa="RMIInterface";
		adres=(InetAddress.getLocalHost()).toString();
		System.out.println("this address="+adres+",port="+port);
	 
	 Registry rejestr = LocateRegistry.createRegistry(port);
	 rejestr.rebind(nazwa, this);
	
	 }
	
	public static void main(String[] args) throws RemoteException, AlreadyBoundException, UnknownHostException, MalformedURLException{
		
		SerwerRMI serv=new SerwerRMI();
	    Naming.rebind("rmi://192.168.1.17/RMIInterface", serv);


	
}
	public String[][] zwrocDane() throws RemoteException {
		
		return dane;
	}

	@Override
	public String[] zwrocNazwyKolumn() throws RemoteException {
		
		return kolumny;
	}

	@Override
	public void Dodaj(String id, String nazwa, String producent, String ilosc) {
		;
}
}
 

Kod Okna:

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.registry.Registry;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;


public class OknoAdmina extends JFrame implements ActionListener {
	

	private JButton pokaz=new JButton("Pokaz produkty");
	private JButton dodaj=new JButton("Dodaj");
	private JButton pokazZamowienia=new JButton("Pokaż zamówienia");
	private JButton wyjdz=new JButton("Wyjdz z programu");
	
	private JTable tabela = new JTable();
	private JScrollPane suwak;
	
	Registry rejestr;
	int port =1099;
	String zmienna;
	
	public String[] kolumny;
	public String[][] dane;
	RMIInterface interfejs;
	
	
	
	public OknoAdmina() throws RemoteException, MalformedURLException, NotBoundException  {
		Remote zdalna = Naming.lookup("rmi://192.168.1.17/RMIInterface");
		interfejs =(RMIInterface)zdalna;
		kolumny=interfejs.zwrocNazwyKolumn();
		dane = interfejs.zwrocDane();
	}

@Override
public void actionPerformed(ActionEvent klik) {
	if(klik.getSource()==pokaz)
	{
			suwak.setVisible(true);	
	}
	
}

public void pokazOknoAdmina() throws RemoteException
{
	setDefaultCloseOperation(EXIT_ON_CLOSE);
	setSize(600,600);
	setTitle("Okno administratora");
	setLayout(null);
	setVisible(true);
	tabela=new JTable(dane,kolumny);
	suwak = new JScrollPane(tabela);
	
	pokaz.setSize(150,30);
	pokaz.setLocation(30, 50);
	pokaz.addActionListener(this);
	
	dodaj.setSize(150, 30);
	dodaj.setLocation(30,100);
	dodaj.addActionListener(this);
	
	wyjdz.setSize(150, 30);
	wyjdz.setLocation(30,200);
	wyjdz.addActionListener(this);
	
	pokazZamowienia.setSize(150,30);
	pokazZamowienia.setLocation(30,150);
	
	suwak.setSize(300, 400);
	suwak.setLocation(230, 50);
	tabela.setBackground(new Color(0,252,255));
	suwak.setVisible(false);
	
	add(pokaz);
	add(dodaj);
	add(pokazZamowienia);
	add(wyjdz);
	add(suwak);
	
}
}

 
0

JTable ma też inne konstruktory, imho dużo bardziej użyteczne, JTable(Vector) , JTable(TableModel). Tu masz przykładowy TableModel, w którym do przechowywania danych jest użyta kolekcja ArrayList

import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;

public class ListyModel extends AbstractTableModel
{
    private static final long serialVersionUID=1L;
    private String[] columnNames={"Opis","Katalog","Nazwa pliku","Jest plik"};
    private Class[] columnClasses={String.class,String.class,String.class,Boolean.class};
    private ArrayList<Lista> listy=new ArrayList<Lista>();
    //------------------------
    public void add(Lista lista)
    {
        listy.add(lista);
    }
    //------------------------
    public void remove(int index)
    {
        listy.remove(index);
    }
    //------------------------
    public int getColumnCount()
    {
        return columnNames.length;
    }
    //------------------------
    public int getRowCount()
    {
        return listy.size();
    }
    //------------------------
    public Object getValueAt(int wiersz,int kolumna)
    {
        Lista l=listy.get(wiersz);
        switch(kolumna)
        {
            case 0:
                return l.getOpis();
            case 1:
                return l.getKatalog();
            case 2:
                return l.getPlik();
            case 3:
                return l.fileExists();
        }
        return null;
    }
    //------------------------
    public String getColumnName(int kolumna)
    {
    	return columnNames[kolumna];
    }
    //------------------------
    public Class getColumnClass(int kolumna)
    {
    	return columnClasses[kolumna];
    }
    //------------------------
    public boolean isCellEditable(int wiersz,int kolumna)
    {
        if (kolumna>0)
        {
            return false;
        }
        return true;
    }
    //------------------------
    public ArrayList<Lista> getListy()
    {
        return listy;
    }
}

Twój poprzedni kod był nieodpowiedni, każdy element kolekcji winien być nową tablicą

            String[] lis=new String[2];
            lis[0]="jasiu";
            lis[1]="stasiu";

            lista.add(lis);
            lis=new String[2];

            lis[0]="mama";
            lis[1]="tata";

            lista.add(lis);
0

OK to jak teraz tego użyć? Teraz sobie pomyślałem ze na serwerze napisałbym funkcję która zwraca ArrayListe złożoną z list. i potem w kliencie robię JTable i wrzucam tą zwróconą Arrayliste jakoś do tabeli ciekawe czy da się ta w ogóle. Bo ja zrobiłem tak i się wykrzacza.

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.registry.Registry;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;


public class OknoAdmina extends JFrame implements ActionListener {
	

	private JButton pokaz=new JButton("Pokaz produkty");
	private JButton dodaj=new JButton("Dodaj");
	private JButton pokazZamowienia=new JButton("Pokaż zamówienia");
	private JButton wyjdz=new JButton("Wyjdz z programu");
	
	ModelTabeli model = new ModelTabeli();
	private JTable tabela = new JTable(model);
	private JScrollPane suwak;
	
	Registry rejestr;
	int port =1099;
	String zmienna;
	
	public String[] kolumny;
	public String[][] dane;
	RMIInterface interfejs;
	List<String> lista;
	
	
	public OknoAdmina() throws RemoteException, MalformedURLException, NotBoundException  {
		Remote zdalna = Naming.lookup("rmi://192.168.1.17/RMIInterface");
		interfejs =(RMIInterface)zdalna;
		kolumny=interfejs.zwrocNazwyKolumn();
		dane = interfejs.zwrocDane();
		
		
	}

@Override
public void actionPerformed(ActionEvent klik) {
	if(klik.getSource()==pokaz)
	{
		lista.add("Szymon");
		lista.add("Karolina");	
		model.addLista(lista);
		suwak.setVisible(true);	
	}
	
}

public void pokazOknoAdmina() throws RemoteException
{
	setDefaultCloseOperation(EXIT_ON_CLOSE);
	setSize(600,600);
	setTitle("Okno administratora");
	setLayout(null);
	setVisible(true);
	//tabela=new JTable();
	suwak = new JScrollPane(tabela);
	
	pokaz.setSize(150,30);
	pokaz.setLocation(30, 50);
	pokaz.addActionListener(this);
	
	dodaj.setSize(150, 30);
	dodaj.setLocation(30,100);
	dodaj.addActionListener(this);
	
	wyjdz.setSize(150, 30);
	wyjdz.setLocation(30,200);
	wyjdz.addActionListener(this);
	
	pokazZamowienia.setSize(150,30);
	pokazZamowienia.setLocation(30,150);
	
	suwak.setSize(300, 400);
	suwak.setLocation(230, 50);
	tabela.setBackground(new Color(0,252,255));
	suwak.setVisible(false);
	
	add(pokaz);
	add(dodaj);
	add(pokazZamowienia);
	add(wyjdz);
	add(suwak);
	
}
} 
0

Bez informacji co i kiedy się wykrzacza i bez kodu klasy ModelTabeli, to tylko wróżka Ci pomoże.

0

Błąd jest w linijce kiedy chce dodać do tabeli listę błędy mówią o nieznanym źródle.
ModelTabeli:

 import java.util.ArrayList;
import java.util.List;

import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;
public class ModelTabeli extends AbstractTableModel {
	
	
	 
	    private static final long serialVersionUID=1L;
	    private String[] columnNames={"Id","Nazwa","Producent","Ilosc"};
	    private Class[] columnClasses={String.class,String.class,String.class,String.class};
	    private ArrayList<List> listy=new ArrayList<List>();
	    //------------------------
	    public void addLista(List lista)
	    {
	        listy.add(lista);
	        fireTableChanged(null);
	    }
	    //------------------------
	    public void remove(int index)
	    {
	        listy.remove(index);
	    }
	    //------------------------
	    public int getColumnCount()
	    {
	        return columnNames.length;
	    }
	    //------------------------
	    public int getRowCount()
	    {
	        return listy.size();
	    }
	    //------------------------
	    public Object getValueAt(int wiersz,int kolumna)
	    {
	        
	        return null;
	    }
	    //------------------------
	    public String getColumnName(int kolumna)
	    {
	            return columnNames[kolumna];
	    }
	    //------------------------
	    public Class getColumnClass(int kolumna)
	    {
	            return columnClasses[kolumna];
	    }
	    //------------------------
	    public boolean isCellEditable(int wiersz,int kolumna)
	    {
	        if (kolumna>0)
	        {
	            return false;
	        }
	        return true;
	    }
	    //------------------------
	    public ArrayList<List> getListy()
	    {
	        return listy;
	    }
	}


0

Opisuj jakoś sensownie błędy, tajemnicze nieznane źródło oznacza że w stosie wywołań występują standardowe klasy Javy, a nie tylko Twój kod. Zapewne (zabawie się we wróżkę) występuje NullPointerException

List<String> lista; //pole lista ma wartość null
...
lista.add("Szymon"); //wywołujesz metodę na rzecz nulla
0

Proszę wytłumaczcie mi o co chodzi z tym TableModel bo zrobiłem coś takiego program się uruchamia bez błędu ale nie działa tak jak trza. Chciałbym żeby do tabeli były dodawane produkty po naciśnięciu przycisku. Program się uruchamia ale produktów nie wyświetla nie wiem czy cokolwiek się dzieje. Proszę zerknijcie na kod i spróbujcie dać jakieś wskazówki rady. Jeśli macie jakieś proste przykłady jak się z tego korzysta będę wdzięczny.

Klasa ModelTabeli:

 import java.util.ArrayList;
import java.util.List;

import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;
public class ModelTabeli extends AbstractTableModel {
	
	
	 
	    private static final long serialVersionUID=1L;
	    private String[] columnNames={"Id","Nazwa","Producent","Ilosc"};
	    private Class[] columnClasses={String.class,String.class,String.class,String.class};
	    private ArrayList<List<String>> listy=new ArrayList<List<String>>();
	    public ArrayList<Produkt> listaProduktow = new ArrayList<Produkt>();
	    int liczbaKolumn;
	    int liczbaWierszy;
	    //------------------------
	    
	    public ModelTabeli(String[] NazwyKolumn, int liczbaKolumn, int liczbaWierszy){
	    	this.columnNames=NazwyKolumn;
	    	this.liczbaKolumn=liczbaKolumn;
	    	this.liczbaWierszy=liczbaWierszy;
	    	listaProduktow.add(new Produkt("1","Szymon","Ryszewski","45"));
	    	listaProduktow.add(new Produkt("","Karolina","Zdzisia","99"));
	    
	    }
	     
	    public void setValueAt(String avalue, int rowIndex, int columnIndex)
	    {
	       switch(columnIndex){
	       case 0:
	    	   ((Produkt) listaProduktow.get(rowIndex)).setId(avalue);
	    	   fireTableCellUpdated(rowIndex,columnIndex); break;
	       case 1:
	    	   ((Produkt) listaProduktow.get(rowIndex)).setNazwa(avalue);
	    	   fireTableCellUpdated(rowIndex,columnIndex); break;
	       case 2:
	    	   ((Produkt) listaProduktow.get(rowIndex)).setProducent(avalue);
		       fireTableCellUpdated(rowIndex,columnIndex); break;
	       case 3:((Produkt) listaProduktow.get(rowIndex)).setIlosc(avalue);
	       fireTableCellUpdated(rowIndex,columnIndex); break;
	       }
	    	   
	    }
	    //------------------------
	    public void remove(int index)
	    {
	        listy.remove(index);
	    }
	    //------------------------
	    public int getColumnCount()
	    {
	        return columnNames.length;
	    }
	    //------------------------
	    public int getRowCount()
	    {
	        return listy.size();
	    }
	    //------------------------
	    public Object getValueAt(int wiersz,int kolumna)
	    {
	        
	        return null;
	    }
	    //------------------------
	    public String getColumnName(int kolumna)
	    {
	            return columnNames[kolumna];
	    }
	    //------------------------
	    public Class getColumnClass(int kolumna)
	    {
	            return columnClasses[kolumna];
	    }
	    //------------------------
	    public boolean isCellEditable(int wiersz,int kolumna)
	    {
	        if (kolumna>0)
	        {
	            return false;
	        }
	        return true;
	    }
	    //------------------------
	    public ArrayList<List<String>> getListy()
	    {
	        return listy;
	    }
	}

Klasa Admin:


import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.registry.Registry;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;


public class OknoAdmina extends JFrame implements ActionListener {
	

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JButton pokaz=new JButton("Pokaz produkty");
	private JButton dodajProdukt=new JButton("Dodaj Produkt");
	private JButton pokazZamowienia=new JButton("Pokaż zamówienia");
	private JButton wyjdz=new JButton("Wyjdz z programu");
	private JButton dodaj = new JButton("Dodaj");
	private JButton anuluj = new JButton("Anuluj");
	
	private JLabel id = new JLabel("Id");
	private JLabel nazwa = new JLabel("Nazwa");
	private JLabel producent = new JLabel("Producent");
	private JLabel ilosc = new JLabel("Ilosc");
	
	private JTextField idText = new JTextField();
	private JTextField nazwaText = new JTextField();
	private JTextField producentText = new JTextField();
	private JTextField iloscText = new JTextField();
	
	ModelTabeli model;
	private JTable tabela;
	private JScrollPane suwak;
	
	
	Registry rejestr;
	int port =1099;
	
	List<String> lista;
	//static int wiersz=0; 
	
	public String[] kolumny;
	RMIInterface interfejs;
	
	public OknoAdmina() throws RemoteException, MalformedURLException, NotBoundException  {
		Remote zdalna = Naming.lookup("rmi://192.168.1.17/RMIInterface");
		interfejs =(RMIInterface)zdalna;
		kolumny=interfejs.zwrocNazwyKolumn();
		model=new ModelTabeli(interfejs.zwrocNazwyKolumn(),10,10);
		tabela = new JTable(model);
		//tabela.setModel(model);
		//lista.add("Szymon");
		//lista.add("Karolina");
		tabela.getColumnModel().getColumn(0).setHeaderValue("id");
		tabela.getColumnModel().getColumn(1).setHeaderValue("Nazwa");
		tabela.getColumnModel().getColumn(2).setHeaderValue("Producent");
		tabela.getColumnModel().getColumn(3).setHeaderValue("Ilosc");
	}

@Override
public void actionPerformed(ActionEvent klik) {
	if(klik.getSource()==pokaz)
	{
		suwak.setVisible(true);	
	}else if(klik.getSource()==dodajProdukt){
		panelDodawania();
	}else if(klik.getSource()==dodaj){
		//tabela.setValueAt(idText.getText(), 0, 0);
		//tabela.setValueAt(nazwaText.getText(), 0, 1);
		//tabela.setValueAt(producentText.getText(), 0, 2); tak tez probowałem i lipa
		//tabela.setValueAt(iloscText.getText(), 0, 3);
		//tabela.setVisible(true);
		//wiersz++;
		model.setValueAt("Szymon", 1, 1);
	}

 
0
  1. Po co Ci w modelu pola IleWierszy i ileKolumn? ileKolumn mógłbyś wykorzystać w metodzie getColumnCount(), (ale nie wykorzystujesz), ileWierszy jest zupełnie bez sensu
  2. Tabela wyświetla to co zwraca metoda getValuAt(). Jak myślisz co wyświetli Twoja tabela?
            public Object getValueAt(int wiersz,int kolumna)
            {
 
                return null;
            }
  1. Mam wrażenie, że zupełnie nie rozumiesz zasad wyświetlania przy pomocy obiektu JTable i modelu, a instrukcje piszesz losowo.
0

OK przyznaje nie rozumie tego. Troszku poczytałem, poszukałem. I próbuję zacząć od samego początku ale i tak coś mi nie idzie :-(

Klasa ModelTabeli:

import java.util.ArrayList;
import java.util.List;

import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;
public class ModelTabeli extends AbstractTableModel {

	ArrayList<String> lista = new ArrayList<String>();
	
	public ModelTabeli(ArrayList<String> lista){
		this.lista=lista;
	}
	
	
	public int iloscWierszy(ArrayList<String> lista){
		int ilosc=0;
		ilosc=lista.size();      // TU JEST LINIJKA 17 
		return ilosc;
	}
	
	@Override
	public int getColumnCount() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int getRowCount() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		// TODO Auto-generated method stub
		return null;
	}
	
}
 

Klasa Admin (Kluczowe momenty):

 
ArrayList<String> lista = new ArrayList<String>();
		lista.add("Szymon");
		lista.add("Karolina");
		model=new ModelTabeli(lista);
		tabela = new JTable(model);
 else if(klik.getActionCommand().equals("dodaj")){
		
		int i=0;
		i =model.iloscWierszy(lista);  //TUTAJ WYWALA BŁĄD
		test.setText(Integer.toString(i));
	}

Błędy:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at ModelTabeli.iloscWierszy(ModelTabeli.java:17)
at OknoAdmina.actionPerformed(OknoAdmina.java:95)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Sour
ce)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

0

OK poradziłem sobie teraz jak wyświetlić to co jest w ArrayList w JTable? Bo tego już nie kminie w ogóle :-(W modelu Tabeli zrobiłem coś takiego. Proszę o pomoc.

 
@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		return lista;
	}

i potem w Oknie Admina:

model.getValueAt(0, 0); 

i nie bardzo chce coś wyświetlić w tabeli :-(

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