ScrollPane in Textarea und auf Panel

Sasku

Mitglied
Hey Leute,

ich bin gerade dabei ein Programm zu schreiben und muss ein JScrollPane einfügen. Einmal in ein Textarea und einmal muss auf die Seite in der das Textarea is ( also das TabPanel ) eine Scrollbar hin.

Java:
			JLabel[] frage = new JLabel[anzFragen];
			
			JLabel[] antwort = new JLabel[anzFragen ];
			
			for(int i = 0; i< anzFragen; i++){							 
				frage[i] = new JLabel("Frage "+(i+1)+":");
				frageEin[i] = new JTextField();							
				antwort[i] = new JLabel("Antwort "+(i+1)+":");
				antwortEin[i] = new JTextArea();
				
			
				frage[i].setBounds(0,i*150,50,20);						//Algorythmus zur positionierung
				frageEin[i].setBounds(0,i*150+25,600,30);
				antwort[i].setBounds(0,i*150+60,80,20);
				antwortEin[i].setBounds(0,i*150+85,600,50);
				// positionierung der Fragen nur zu Testzwecken.. kommt aber aufs gleiche raus.
				tabContent[3].add(frage[i]);
				tabContent[3].add(frageEin[i]);
				tabContent[3].add(antwort[i]);
				tabContent[3].add(antwortEin[i]);
				
				
			}
			
			
			
			JPanel scrollPanel = new JPanel();
			scrollPanel.setLayout(null);
			scrollPanel.setBounds(0, 0, 700, 1000);
//			scrollPanel.setBackground(Color.green);
			
			scrollPanel.setPreferredSize(new Dimension(700, 1000));
			scrollPanel.setMinimumSize(new Dimension(700, 1000));
			
			JScrollPane scrolls=new JScrollPane(scrollPanel,
					ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
		            ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
					scrolls.setBounds(0, 0, 690, 420);
					tabContent[3].add(scrolls);



das tabContent[3] ist das Panel auf dem das ganze angezigt werden soll.


Also bei der Textarea fügt es gar kein JScrollPane hinzu ( gut ich habe den dazugehörigen Code entfernt weil der Schwachsinn war... muss dennoch wissen wie es geht. ).. aber das eigentliche Problem ist, dass wenn ich die ScrollPane ( welche hinzugefügt ist) nicht richtig funktioniert .. wenn ich nach unten Scrolle ist das Problem, dass die restlichen Label und Textfelder,... nicht angezeigt werden und wenn ich dann wieder nach oben scrolle alles andere gelöscht ( besser gesagt überschrieben wird ) ..


Hoffe ihr könnt mir helfen!

danke jedenfalls schon mal!


Lg
 
Java:
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.ScrollPane;
import java.io.File;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;


public class Frame extends JFrame{
	
	static JPanel[] tabContent;
	static String[] tabName = {"Startseite","Deckblatt","Aufgaben","Fragen","Arbeitsplan","Prüfplan","Stückliste","Anhang"};
	static JTextField speicherortt = new JTextField();// Speicherpfad soll angegeben werden
	static JTextField uberschriftt = new JTextField();
	static JTextField unteruberschrift1t = new JTextField();
	static JTextField unteruberschrift2t = new JTextField();
	static JTextField bild1t = new JTextField();
	static JTextField bildunterschriftt = new JTextField();
	static JButton bild1b = new JButton("Durchsuchen..");//Öffnen von JFileChooser der das ergebnis in das Textfield reinschreibt
	static JTextField bild2t = new JTextField();
	
	static final int anzFragen = 8;
	private static final Component JScrollPane = null;
	static JTextField[]frageEin = new JTextField[anzFragen];
	static JTextArea[] antwortEin = new JTextArea[anzFragen];
	
	//	ich hab mal die Grundlegenden sachen definiert und dein programm etwas abgekürzt und verändert tabs sind oben da wir mehr platz brauchen werden
	//	versuch mal das Positionieren und ausarbeiten von dem Code bei den Algorythmen für Action bzw ItemListener und so kann ich dir auch gern helfen
	
	//	Ich schicks dir einfch mal per Email weil ich des sonst eh vergessen werde... blablabla ende der beschreibung und so.
	
	
	public Frame(){	
		setSize(700, 500);
		setLayout(new GridLayout(1,1));
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLocationRelativeTo(null);
		setTitle("Test");
		setResizable(false);
		setAlwaysOnTop(true);
		
	
		// Menü: öffnen, speichern, schließen
		JMenuBar menue = new JMenuBar();
		JMenu menu = new JMenu("Datei");
			JMenuItem open = new JMenuItem("Datei öffnen");
			JMenuItem save = new JMenuItem("Datei speichern");
			JMenuItem close = new JMenuItem("Schließen");
			menu.add(open);
			menu.add(save);
			menu.add(close);
	
			//ich lasse Leerzeilen
			//damit es kurzzeitig leichter wird für mich zu 
			//orientieren.
			
			
			
			
	
			
			
			
			
			
			
			
			
			
			
			
	       //Grundlegende erstellung der Tabs
			 JTabbedPane tabpane = new JTabbedPane
	            (JTabbedPane.TOP,JTabbedPane.SCROLL_TAB_LAYOUT );
			
			tabContent = new JPanel[tabName.length];
	       for(int i = 0; i<tabName.length; i++){
	    	   tabContent[i]=new JPanel();
	    	   tabpane.addTab(tabName[i], tabContent[i]);
	    	   tabContent[i].setLayout(null);
	    	   
	    	   
	       }
	       
	       

	       //SpeicherortSeite
	       JLabel speicherortl = new JLabel("Speicherort angeben: ");//t = text,b = button und l = label stehen für die jeweiligen objekte damit man später besser damit arbeiten kann
	       speicherortl.setBounds(0, 0, 200, 20);
	       tabContent[0].add(speicherortl);
	       JButton speicherortb = new JButton("Durchsuchen..");//Öffnen von JFileChooser der das ergebnis in das Textfield reinschreibt
	       speicherortb.setBounds(290,30,130,30);
	       tabContent[0].add(speicherortb);
	       speicherortt.setBounds(0,30,280,30);
	       tabContent[0].add(speicherortt);
	       speicherortb.addActionListener(new SearchListener(speicherortt));
	       
	       
	       
	       JLabel beschreibung = new JLabel(); //Hier sollte villeicht eine art beschreibung angegeben werden wie das Programm funktioniert
	       beschreibung.setText("<html>Sie tragen die benötigten Komponenten, d.h. die verschiedenen Überschriften und Aufgaben in die dafür vorhergesehenen Textfelder ein. <p/> "+                  
                   "Eine genauere Beschreibung des jeweiligen Tabs finden Sie am Tab.</html>");
	       
	       
	       beschreibung.setBounds(0, 50, 500, 100);
	       tabContent[0].add(beschreibung);
	       
	       //Weitere Elemente...
	       //Positionierung ...
	       //Ende Speicherortseite
	
	       //Deckblatt
	       
	      
	       JLabel uberschriftl = new JLabel("Überschrift: ");//Namen und so noch anpassen Unterüberschrift 1 und so kann man nicht so lassen ^^
	       uberschriftl.setBounds(0, 0, 180, 15);
	       tabContent[1].add(uberschriftl);
	       uberschriftt.setBounds(0,20,420,30);
	       tabContent[1].add(uberschriftt);
	       
	       
	       JLabel unteruberschrift1l = new JLabel("Unterüberschrift : ");
	       unteruberschrift1l.setBounds(0, 55, 180,15);
	       tabContent[1].add(unteruberschrift1l);
	       unteruberschrift1t.setBounds(0,75,420,30);
	       tabContent[1].add(unteruberschrift1t);
	       
	       
	       JLabel unteruberschrift2l = new JLabel("Ausbildungsrichtung/ - jahr: ");
	       unteruberschrift2l.setBounds(0,110,180,15);
	       tabContent[1].add(unteruberschrift2l);
	       unteruberschrift2t.setBounds(0,130,420,30);
	       tabContent[1].add(unteruberschrift2t);

	       
	       JLabel bild1l = new JLabel("Speicherort angeben: ");//Bild auswählen für Deckblatt
	       bild1l.setBounds(0,165,180,15);
	       tabContent[1].add(bild1l);
	       bild1t.setBounds(0, 185, 280, 30);
	       tabContent[1].add(bild1t);
	       bild1b.setBounds(290, 185, 130, 30);
	       tabContent[1].add(bild1b);
	       bild1b.addActionListener(new SearchListener(bild1t));
	
	       
	       JLabel bildunterschriftl = new JLabel("Bildunterschrift: ");			
	       tabContent[1].add(bildunterschriftl);
	       bildunterschriftl.setBounds(0,220,180,20);
	       
	       bildunterschriftt.setBounds(0, 245, 420, 30);
	       tabContent[1].add(bildunterschriftt);

	       tabContent[1].add(bildunterschriftl);
	       
	       JLabel beschrDeck = new JLabel(""); // Beschreibung des Tabs .. das Wort Unterübeschrift bitte noch ändern!
	       beschrDeck.setText("<html>Dieser Tab legt das Thema des Gehäfts fest. <p/> "+                  
                   "Zuerst wird die Überschrift, welche auf gleichzeitig das Thema des Gehäfts ist festgelegt, danach wird eine Unterüberschrift beschrieben. Als nächstes kommt die Art der Ausbildung und für welches Ausbildungsjahr dieses Gehäft gedacht ist.</p>" +
	    		   "Folgend legt man ein Bild fest, welches das Thema veranschaulichen soll. Darunter kommt eine Bildunterschrift, welche das Bild näher beschreibt.</html>");
	       beschrDeck.setBounds(0,290,500,100);
	       tabContent[1].add(beschrDeck);
	       //Ende Deckblatt
	       
	       
	   
	       
	       
	       
	       
	       //AufgabeSeite
	       JLabel aufgabel = new JLabel("Aufgabe: ");
	       JTextField aufgabet = new JTextField();
	       JLabel zeichnungl = new JLabel("Zeichnung: ");
	       JTextField zeichnungt = new JTextField();
	       JLabel mindestanforderungl = new JLabel("Mindestanforderung: ");
	       JTextField mindestanforderungt = new JTextField();
	       JLabel qualifikationenl = new JLabel("Qualifikationen: ");//Label links und rechts davon ein dropdownmenü bei dem man einstellen kann wie viel "TextFields" unten angezeigt werden für qualifikationen
	       JTextField qualifikationent[];//Anzahl der qualifikationen
	       
	       JComboBox qualifikationenc;//Erstellung des DropdownMenüs
	       String[] dropdownAuswahl = new String[26];//Ich hoffe es funktioniert^^
			for(int i = 0; i<dropdownAuswahl.length-1; i++){
				dropdownAuswahl[(i<25)?i+1:i]=""+(i+1);

				
			}
			dropdownAuswahl[0]="Anzahl";
			qualifikationenc = new JComboBox(dropdownAuswahl);//Hier kein ActionListener sondern ein ItemListener!!!
			//Evtl noch mit JScrollPane versehen wenn es zu viele Elemente sind

	       //Ende AufgabeSeite
			
			
			
			
			
			
			
			//Fragenseiten
			//Es sind immer 8 Fragen!
			
			JLabel[] frage = new JLabel[anzFragen];
			
			JLabel[] antwort = new JLabel[anzFragen ];
			
			for(int i = 0; i< anzFragen; i++){							 
				frage[i] = new JLabel("Frage "+(i+1)+":");
				frageEin[i] = new JTextField();							
				antwort[i] = new JLabel("Antwort "+(i+1)+":");
				antwortEin[i] = new JTextArea();
				
			
				frage[i].setBounds(0,i*150,50,20);						//Algorythmus zur positionierung
				frageEin[i].setBounds(0,i*150+25,600,30);
				antwort[i].setBounds(0,i*150+60,80,20);
				antwortEin[i].setBounds(0,i*150+85,600,50);
				// positionierung der Fragen nur zu Testzwecken.. kommt aber aufs gleiche raus.
				tabContent[3].add(frage[i]);
				tabContent[3].add(frageEin[i]);
				tabContent[3].add(antwort[i]);
				tabContent[3].add(antwortEin[i]);
				
				
			}
			
			
			
			JPanel scrollPanel = new JPanel();
			scrollPanel.setLayout(null);
			scrollPanel.setBounds(0, 0, 700, 1000);
//			scrollPanel.setBackground(Color.green);
			
			scrollPanel.setPreferredSize(new Dimension(700, 1000));
			scrollPanel.setMinimumSize(new Dimension(700, 1000));
			
			JScrollPane scrolls=new JScrollPane(scrollPanel,
					ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
		            ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
					scrolls.setBounds(0, 0, 690, 420);
					tabContent[3].add(scrolls);	

			
			//Diese dann mit einem Algorytmus Positionieren geht evtl schon in der for schleife
			
			//Ende FragenSeiten
	
			
			
			
			
			
			//ArbeitsPlan
			final int anzAufgaben = 10; //10 ist noch nicht save deshalb mach ichs mit na variable dann kann man es leicht anpassen
			//Die anordung machst du villt mit tabellenlikeansicht ->frag einfach mich ^^ das spart in dem fall viel platz
			
			JTextField[] arbeitsGang = new JTextField[anzAufgaben];//Evtl einige durch JTextArea ersetzen da bei Werkzeuge,Prüfmittel ziemlich viel text ist
			JTextField[] werkzeuge = new JTextField[anzAufgaben];
			JTextField[] zeitMin = new JTextField[anzAufgaben];
			
			JLabel[] lfdNummer = new JLabel[anzAufgaben];
			for(int i = 0; i<anzAufgaben; i++){//links zur besseren orientierung
				lfdNummer[i] = new JLabel(""+i);
				arbeitsGang[i]=new JTextField();
				werkzeuge[i]=new JTextField();
				zeitMin[i]=new JTextField();
			}
			
			JLabel arbeitsgang = new JLabel("Arbeitsgänge");//Oben erste reihe
			JLabel werkzeug = new JLabel("Werkzeuge, Prüfmittel");
			JLabel zeit = new JLabel("Arbeitszeit");
			
			//ab 2te Reihe
			//Positionieren von arbeitsGang,werkzeuge und zeitMin Tabellenlike
			
			//Ende Arbeitsplan
			
			
			//Stückliste
			
			
			
			//Ende Stückliste
			

			//Prüfplan
			
			//Hier weiß ich noch nicht genau welche eingaben man bekommen soll -> Falge fragen und so ^^
			
			//Ende Prüfplann
			
			

			
			//Anhang
			JLabel anhangNamel = new JLabel("Anhang: ");
		    JTextField anhangNamet = new JTextField();
		    
		    JLabel bild2l = new JLabel("Speicherort angeben: ");//Bild auswählen
		    bild2l.setBounds(0, 0, 150, 20);
		    tabContent[6].add(bild2l);
		    JButton bild2b = new JButton("Durchsuchen..");//Öffnen von JFileChooser der das ergebnis in das Textfield reinschreibt
		    bild2b.setBounds(290,25,130,30);
		    tabContent[6].add(bild2b);
		    bild2t.setBounds(0,25,280,30);
		    tabContent[6].add(bild2t);
		    bild2b.addActionListener(new SearchListener(bild2t));
		    
		    JLabel beschrNr6 = new JLabel();
		    
		    beschrNr6.setText("<html>In diesem Tab wird das Bild vom Anhang geladen. <p/> "+                  
	                   "Anschließend kontrollieren Sie die Daten nochmal und drücken, wenn alles passt, damit das Dokument erstellt werden kann.</html>");
		    beschrNr6.setBounds(0,50,500,100); 
		    tabContent[6].add(beschrNr6);
		    
		    JButton ok = new JButton("ok"); // Button zum speichern des Programms, der Strings usw. 
		    ok.setBounds(0,170,50,50);
		    tabContent[6].add(ok);
		    
			//Ende Anhang
			

		    
		    
			menue.add(menu);
			setJMenuBar(menue);
			add(tabpane);
			
			setVisible(true);
			
		
	
	
	}
    public String pfadAuswahl(){
 	   JFileChooser fileChooser = new JFileChooser();
 	   int result = fileChooser.showOpenDialog(fileChooser);
 	   if (result == JFileChooser.APPROVE_OPTION) {
 	   File selectedFile = fileChooser.getSelectedFile();
 	   return selectedFile.getAbsolutePath();}
 	  return null;
 	   }
    
}



so dass ist die Frame klasse .. die main klasse und die listener dürften ja eigentlich nichts damit zu tun haben ...

jetzt habt ihr meinen gesamten code ( weil ja etwas mehr nich schlecht is ^^ ) .. wenn ihr fragen habt einfach sagen.
 
du fügst die Komponenten genauso wie das ScrollPane der TabPage zu, das ergibt dann graphischen Murks. das dann leere Panel übermalt die Komponenten beim schieben. sie müssen natürlich dem Panel zugefügt werden, weil dieses wiederum der ScrollPane zugefügt wird, und nur das dann der TabPage

Java:
JLabel[] frage = new JLabel[anzFragen];

		JLabel[] antwort = new JLabel[anzFragen];

		JPanel scrollPanel = new JPanel();
		scrollPanel.setLayout(null);
		scrollPanel.setBounds(0, 0, 700, 1000);
		scrollPanel.setPreferredSize(new Dimension(700, 1000));
		scrollPanel.setMinimumSize(new Dimension(700, 1000));

		for (int i = 0; i < anzFragen; i++) {
			frage[i] = new JLabel("Frage " + (i + 1) + ":");
			frageEin[i] = new JTextField();
			antwort[i] = new JLabel("Antwort " + (i + 1) + ":");
			antwortEin[i] = new JTextArea();

			frage[i].setBounds(0, i * 150, 50, 20); // Algorythmus zur
													// positionierung
			frageEin[i].setBounds(0, i * 150 + 25, 600, 30);
			antwort[i].setBounds(0, i * 150 + 60, 80, 20);
			antwortEin[i].setBounds(0, i * 150 + 85, 600, 50);
			// positionierung der Fragen nur zu Testzwecken.. kommt aber aufs
			// gleiche raus.
			scrollPanel.add(frage[i]);
			scrollPanel.add(frageEin[i]);
			scrollPanel.add(antwort[i]);
			scrollPanel.add(antwortEin[i]);

		}

		JScrollPane scrolls = new JScrollPane(scrollPanel, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
				ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		scrolls.setBounds(0, 0, 690, 420);
		tabContent[3].add(scrolls);
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben