Zadanie programistyczne

0

Stworzyć JListę, pokazująca informacje o temperaaturze w postaci:

k stopni C = f stopni F

gdzie k zmienia się od -70 do +60.

Uwaga: nie wolno używać tablic ani kolekcji.

Zrobilem tak ze uzywam jednak tablicy string
String[] strings1 = new String[200];
a potem w forze:

strings1[count] = i+" stopni C =  "+f+" stopni F ";

a potem

JList list = new JList(strings1);
JFrame frame = new JFrame("JList Test");

itp i koniec.

ale jak to zrobic jak w poleceniu bez uzycia tablic:(
Dodam ze jestem poczatkujacy, i nie za bardzo dobrze orientuje sie w tej materii aby wykonac to zadanie, prosze o pomoc

0

Użyj pętli i w pętli dodawaj kolejne elementy do JListy.

0

@[losowa nazwa]
Przy użyciu jakiej metody? :) (Spójrz do specyfikacji JList!)

@Nickxv4
Obawiam się, że nie ma na to super-hiper-prostego sposobu, ale chyba o to chodzi w tym zadaniu. Jest jednak sposób, powiedzmy, "prosty" i elegancki. Choć nie do końca bezpośredni.

JList to element interfejsu. Tak naprawdę nie przechowuje on bezpośrednio informacji (tj. listy jakichś wartości) i dlatego nie zawiera prostej metody add(cośtam). JList przechowuje dane w modelu -- ukrytym obiekcie składowym implementującym interfejs javax.swing.ListModel.

Istnieją wersje konstruktora JList, którym przekazuje się wektor, czy tablice, ale nie możesz ich użyć, bo zabrania tego zadanie. Nie zabrania jednak użycia innego konstruktora, któremu przekazuje się właśnie obiekt ListModel.

ListModel to tylko interfejs, ale w pakiecie (javax.swing) jest też gotowa klasa DefaultListModel, która okaże się przydatna w tym wypadku. Tworzysz instancję tej klasy np. jako zmienną lokalną model. Przekazujesz ją konstruktorowi JList. I do modelu dodajesz w pętli elementy przy użyciu metod model.add lub (chyba będzie wygodniej) model.addElement.

Lista ma referencję do tego modelu (przekazałeś tę referencję konstruktorowi listy!), więc będzie się uaktualniała w miarę dodawania do niego kolejnych elementów, czyli stringów.

Zastrzegam, że w swingu nie bawiłem się gdzieś od roku i teraz wszystko wyszperałem na sucho, w specsach Javy. Mam nadzieję, że nie poradziłem niczego bezsensownego, co przed 4 w nocy się zdarza.

0

a moglbys wkleic przykladowe pare linijek kodu ktore to obrazuja? bo nie bardzo tego widze:(

0

Okay, ale piszę na sucho kawałek metody (musisz mieć zaimportowane ListModel i DefaultListModel z javax.swing!):

ListModel model = new DefaultListModel();
JList list = new JList(model);

// i tu dodajesz elementy do modelu, co będzie
// odwzorowane na JLiście
model.addElement("jeden");
model.addElement("dwa");
// ^^ możesz, czy raczej powinieneś zrobić to w pętli
0

tak super o to chodzilo(przyznam sie ze spedzilem cala noc i samemu mi sie udalo zrobic:))

ale mam jeden problem jeszcze, glowilem sie nad tym pare h, ale najpierw tresc cala wrzuce:

Stworzyć tabellę (JTable), pokazującą ksiaażki.
Książka ma:
autora
tytul
cenę
Informacja o książkach ma być wczytana z pliku tekstowego.
Należy zapewnić:
możliwość edycji cen w tabeli (w komórce)
możlwiość dodawania i usuwania wierszy do/z tabeli z poziomu GUI.

Problem moj polega na tym ze nie moge dojsc w jaki sposob wczytac do tej tablicy, ale calego pliku.

Object[][] data = { { "Chopin Fryderyk", "M", 1789 },
{ "Kopernik Mikołaj", "M", 2900 },
{ "Słowacki Juliusz", "M", 2000 },
{ "Szymborska Wisława", "K", 5200 },
{ "Polański Roman", "M", 3000 },
{ "Skłodowska-Curie Maria", "K", 2000 },
{ "Modrzejewska Helena", "K", 2000 },
};

Sam fakt wczyttywania dziala

while ((buffer = lnr.readLine()) != null) {
			StringTokenizer st = new StringTokenizer(buffer,";");
autor = st.nextToken();
				tytul = st.nextToken();
				cena = st.nextToken();
				System.out.print(autor+";");
				System.out.print(tytul+";");
				System.out.println(cena);
				data2 = new Object[][] { { autor, tytul, cena }}; 
//tu dla przykladu dalem data2 zamiast data; wczytuje i wynikiem jest odstatnia ksiazka z pliku zamiast wszystkie

Format z pliku jest nastepujacy:
Adam Mickiewicz; Pan Tadeusz; 1000
Adam Mickiewicz; Pan Tadeusz; 100
Rownling; Harry Potter; 100

Prosze o jakis pomysl, bo nie saze zebym to przeszedl sam. za duzo spedzilem czasu nad tym, i prosze o podpowiedz co zrobic jak doisac aby wrzucal kolejne elementy do tej tablicy.

0

Zobacz poniższy przykładowy kod:

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;

public class Program {
	public static void main(String[] args) throws ParseException {
		for (FileItem item : FileItem.readItems("J:\test.txt")) {
			System.out.println(item.toString());
		}
	}
	
	public static class FileItem {
		private String author;
		private String book;
		private Double price;
		public String getAuthor() {
			return author;
		}
		public void setAuthor(String author) {
			this.author = author;
		}
		public String getBook() {
			return book;
		}
		public void setBook(String book) {
			this.book = book;
		}
		public double getPrice() {
			return price;
		}
		public void setPrice(double price) {
			this.price = price;
		}
		public FileItem(String author, String book, Double price) {
			this.author = author;
			this.book = book;
			this.price = price;
		}
		@Override
		public String toString() {
			return String.format("%s;%s;%s", author, book, price.toString());
		}
		public static List<FileItem> readItems(String fileName) {
			ArrayList<FileItem> items = new ArrayList<FileItem>();
			BufferedReader reader = null;
			try {
				reader = new BufferedReader(new InputStreamReader(new DataInputStream(new FileInputStream("j:\\test.txt"))));
				String line = null;
				while ((line = reader.readLine()) != null) {
					String[] split = line.split(";");
					if (split.length == 3) {
						items.add(new FileItem(split[0], split[1], new Double(split[2].trim())));
					}
				}
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			} finally {
				if (reader != null)
					try {
						reader.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
			}
			return items;
		}
	}
}
0

czy konieczna jest wewnatrz klasa FileItem?

wczytalem z pliku za pomoca

String[] columnNames = { "Nazwisko i imię", "Tytul", "Cena" };
final DefaultTableModel model = new DefaultTableModel(data2,columnNames);
final JTable table2 = new JTable(model);
while ((buffer = lnr.readLine()) != null) {
			StringTokenizer st = new StringTokenizer(buffer,";");
			
			while(st.hasMoreTokens()){
				
				autor = st.nextToken();
				tytul = st.nextToken();
				cena = st.nextToken();
				model.insertRow(counter,new Object[]{autor,tytul,cena});
				counter++;

I zadzialalo. W JTabeli weszly ladnie tytuly, auotrzy i cena.

Czym sie rozni Twoje od mojego, poza tym ze jest bardzo skomplikowany:(

0

Uruchomilem, Twoj nie jest w JTabeli :( a powinien.

0

Moze tak byc jak wleilem wyzej?

0
Nickxv4 napisał(a)

Stworzyć JListę, pokazująca informacje o temperaaturze w postaci:

k stopni C = f stopni F

gdzie k zmienia się od -70 do +60.

Uwaga: nie wolno używać tablic ani kolekcji.

Zrobilem tak ze uzywam jednak tablicy string
String[] strings1 = new String[200];
a potem w forze:
strings1[count] = i+" stopni C = "+f+" stopni F ";

a potem
> 
> <code>JList list = new JList(strings1);
JFrame frame = new JFrame("JList Test");

itp i koniec.

ale jak to zrobic jak w poleceniu bez uzycia tablic:(
Dodam ze jestem poczatkujacy, i nie za bardzo dobrze orientuje sie w tej materii aby wykonac to zadanie, prosze o pomoc

Użyj tego modelu w JList

/*

To change this template, choose Tools | Templates</li> and open the template in the editor.
*/</li> </ul>

package org.celsiustofarenheit;

import javax.swing.AbstractListModel;

public class CelsiusToFarenheitModel extends AbstractListModel {

private String celsToFarenheit(int cels){
    return (32 + ((9/5) * cels)) + " st. F" ;
}

public int getSize() {
    return 131;
}

public Object getElementAt(int index) {
   return index - 70 + " st. C = " + celsToFarenheit(index - 70);
}

}

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