wie Scrollen?

Status
Nicht offen für weitere Antworten.
Hallo zusammen,

ich brauch mal wieder Professionelle Hilfe. Das Layout und die Layout Manager machen mich als blutigen Anfänger fast verrückt.
Also ich ich habe eine Jframe erstellt auf dem Artikel angezeigt werden sollen (siehe Screenshot). Das habe ich so gemacht

Java:
public Artikel_show(ArtikelList list)
	{
		menue = new JFrame("Artikel anzeigen");
		menue.setSize(850,400);
		menue.setVisible(true);
		menue.setLocationRelativeTo(null);
		menue.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		menue.setLayout(null);
		
		header = new JLabel("Artikelübersicht");
		name = new JLabel("Name");
		umsatz = new JLabel("Umsatz");
		verkauft = new JLabel("Verkauft");
		preis = new JLabel("Preis");
		menge = new JLabel("Menge");
		guv = new JLabel("GuV");
		epreis = new JLabel("Einkaufspreis");
		
		header.setBounds(30,30,100,15);
		name.setBounds(30,50,200,15);
		menge.setBounds(250,50,100,15);
		preis.setBounds(350,50,120,15);
		verkauft.setBounds(430,50,120,15);
		umsatz.setBounds(540,50,120,15);
		guv.setBounds(640,50,120,15);
		epreis.setBounds(730,50,100,15);
		
		menue.add(header);
		menue.add(name);
		menue.add(preis);
		menue.add(verkauft);
		menue.add(menge);
		menue.add(umsatz);
		menue.add(guv);
		menue.add(epreis);
		
		i = list.getAnzahl();	
		
		show(list);
	}
	
	public void show(ArtikelList list)
	{
		int j = 0;
		int y = 70;
		
		try
		{
			for(j=0;j<list.getAnzahl();j++)
			{
				
				//Name
				JLabel name = new JLabel();
				name.setText(list.getName(j));
				name.setBounds(30,y,200,30);
				menue.add(name);
			
				//Menge
				JLabel menge = new JLabel();
				menge.setText(""+list.getMenge(j));
				menge.setBounds(250,y,50,30);
				menue.add(menge);
			
				//Verkaufspreis
				JLabel preis = new JLabel();
				preis.setText(""+df.format(list.getPreis(j)));
				preis.setBounds(350,y,70,30);
				menue.add(preis);
			
				//Verkauft
				JLabel verkauft = new JLabel();
				verkauft.setText(""+list.getVerkauft(j));
				verkauft.setBounds(430,y,50,30);
				menue.add(verkauft);
			
				//Umsatz
				JLabel umsatz = new JLabel();
				umsatz.setText(""+df.format(list.getUmsatz(j)));
				umsatz.setBounds(540,y,70,30);
				menue.add(umsatz);
			
				//Gewinn und Verlust
				JLabel guv = new JLabel();
				guv.setText(""+df.format(list.getGuv(j)));
				guv.setBounds(640,y,70,30);
				menue.add(guv);
			
				//Einkaufspreis
				JLabel ePreis = new JLabel();
				ePreis.setText(""+df.format(list.getAufwendungen(j)));
				ePreis.setBounds(730,y,70,30);
				menue.add(ePreis);
			
				//Erhöhung des Werts y zur Positionierung auf der y-Achse
				y+=20;			
			}
		}
		catch(NullPointerException e)
		{
			
		}
	}	
}

Jetzt habe ich das Problem das ich es nicht schaffe dem Ding beizubringen das es nach unten scrollen soll wenn genug Einträge vorhanden sind. Wie macht man das? Ich habe bereits mit den Layout Managern gespielt aber bis jetzt nichts erreicht.
 
Ich bin inzwischen drauf gekommen und hab es so gelöst.

Java:
public Artikel_show(ArtikelList list)
	{
		//Frame Werte setzen Name, Programmende beim schließen, 
		//Grösse, Sichtbarkeit, Fenster zentriert
		menue = new JFrame("Artikel anzeigen");
		menue.setSize(850,400);
		menue.setVisible(true);
		menue.setLocationRelativeTo(null);
		menue.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		menue.setLayout(new GridLayout(0,1,10,10));
		
		//Erzeugen der Label für die Überschrift und die Titelleiste
		header = new JLabel("Artikelübersicht");
		name = new JLabel("Name");
		umsatz = new JLabel("Umsatz");
		verkauft = new JLabel("Verkauft");
		preis = new JLabel("Preis");
		menge = new JLabel("Menge");
		guv = new JLabel("GuV");
		epreis = new JLabel("Einkaufspreis");
		
		spalten = 7;
		zeilen = list.getAnzahl();
		rowData = new String[zeilen][spalten];
		fillRowData(list);
		tabel = new JTable(rowData,columnData);
		menue.add(new JScrollPane(tabel));
		tabel.setRowHeight(50);
	}
	
	/**
	 * Füllt den String für die Tabellen Daten
	 * 
	 * @param list
	 */
	public void fillRowData(ArtikelList list)
	{
		for(int i=0;i<list.getAnzahl();i++)
		{
			int j = 0;
			
			rowData[i][j] = list.getName(i);
			rowData[i][++j] = ""+list.getMenge(i);
			rowData[i][++j] = ""+df.format(list.getVerkauft(i));
			rowData[i][++j] = ""+df.format(list.getPreis(i));
			rowData[i][++j] = ""+df.format(list.getUmsatz(i));
			rowData[i][++j] = ""+df.format(list.getGuv(i));
			rowData[i][++j] = ""+df.format(list.getAufwendungen(i));
		}
	}
}
 
OK, dann noch was hinterher 😉 : Diese ArtikelList sieht ... ungewöhnlich aus. (Nicht, dass das grundsätzlich schlecht wäre, aber ... ) In manchen Bereichen (nämlich "hardwarenahe", "low-level"-Parallelprogrammierung) kann eine "Structure Of Arrays" gut sein, aber üblicherweise verwendet man eher einen "Array Of Structures". In diesem konkreten Fall heißt das, dass eine AktikelList in dieser Form nicht so günstig ist:
Code:
class ArtikelList
{
    String getName(int i) { ... }
    int getAnzahl(int i) { ... }
    float getPreis(int i) { ... }
}
Stattdessen sollte es eine Klasse (oder ein Interface) "Artikel" geben:
Code:
class Artikel
{
    String getName() { ... }
    int getAnzahl() { ... }
    float getPreis() { ... }
}

Und davon sollte man dann eine Liste anlegen - das braucht dann keine eigene Klasse mehr zu sein, sondern wäre einfach nur noch eine
List<Artikel> artikelList = new ArrayList<Artikel>();

Mit der "ArtikelList" kommt man u.U. in Schwierigkeiten. Wenn du jetzt diese ArtikelList z.B. nach dem Namen des Artikels alphabetisch sortieren wolltest, würde das Gewurschtel schon losgehen....
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben