JScrollPane swing

Status
Nicht offen für weitere Antworten.

JavaNooby

Aktives Mitglied
Hi,

Folgendes Szenario ^^

Ich habe eine JScrollPane die den ViewPortView auf eine JTextArea hat.

Gibt es die Möglichkeit die Vertiale Scrollbar von der JScrollpane unabhänig von der JTextArea zu machen (So dass wenn ich an der Vertikalen ScrollBar scrolle sich nichts an der JTextArea verändert) ?



Vielen Dank ;)
 

JavaNooby

Aktives Mitglied
ok das ist etwas schwieriger zum erklären ^^.

Ich schreib grad n kleines Tool zum logfiles analysieren. Und ich lad immer nur die Zeilen in die textarea die auch gebraucht werden. so erspar ich mir beim starten das komplette logfile durchzulesen. Gedacht hab ich mir wenn ich die vertikale scrollbar nehm kann ich anhand des values was der lineNumber der datei entspricht genau die zeilen einblenden. Dummerweise rutscht nach meinem "Scrollvorgang" die scrollbar nach unten und verändert wieder den maximalen index.


Ich hoffe man hats verstanden ^^.
 

JavaNooby

Aktives Mitglied
den code posten ^^ das könnte peinlich werden, aber gut ;)

Also das da Alles in ne HashMap reingepackt wird will ich noch rausnehmen das war nur zum testen, aber könnte so funktionieren ;)

Die Klasse ControlJFrame läd die Datei in eine HashMap und soll der Vertikalen Scrollbar der Klasse Gui die lineNumber als scrollwerte setzen.
Beim Scrollen soll dann anhand der value die zeilen aus der hashmap in die textarea übertragen werden.

Java:
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;


public class Gui extends JFrame implements AdjustmentListener
{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private JTextArea textArea = new JTextArea();
	private ControlJFrame ctrJFrame = new ControlJFrame(this);
	private JScrollPane scrollPane = new JScrollPane(textArea);

	public Gui()
	{
		this.setVisible(true);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setSize(640,480);
		this.add(scrollPane);
		
		scrollPane.getVerticalScrollBar().addAdjustmentListener(this);
		scrollPane.getViewport().remove(scrollPane.getVerticalScrollBar());
		scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
		scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
		}
	private void setTextToTextArea(String[] text)
	{
		textArea.setText("");
		for(int i =0;i<text.length;i++)
		{
			if(text[i]!= null)
			{
				textArea.setText(textArea.getText()+System.getProperty("line.separator")+text[i]);
			}
		}
	}
	@Override
	public void adjustmentValueChanged(AdjustmentEvent e)
	{
		setTextToTextArea(ctrJFrame.prepareTextForTextArea(e.getValue()));
	}
	public void setLineNumberOfFile(int lineNumber)
	{
		scrollPane.getVerticalScrollBar().setMaximum(lineNumber);
		
	}
	

}

Und hier die andere Klasse

Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.HashMap;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JScrollBar;


public class ControlJFrame extends JFrame implements ActionListener
{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private Gui gui;
	private JButton loadLogFileJButton = new JButton("Load File");
	private File logFile;
	private HashMap<Integer, String> lineHashMap = new HashMap<Integer, String>();
	private HashMap<Integer, Boolean> errorHashMap = new HashMap<Integer, Boolean>();
	
	public ControlJFrame(Gui gui)
	{
		this.gui=gui;
		this.setSize(300,300);
		this.setVisible(true);
		this.setLayout(null);
		
		loadLogFileJButton.setSize(180,20);
		loadLogFileJButton.addActionListener(this);
		this.add(loadLogFileJButton);
		

	
	}
	private void parseLogFileToHashMap()
	{
		try
		{
			BufferedReader br =	new BufferedReader(new FileReader(logFile));
			String line;
			int lineCounter = 0;
			while ((line = br.readLine()) != null)
			{
				errorHashMap.put(lineCounter, line.contains("Excpetion"));
				lineHashMap.put(lineCounter, line);
				lineCounter++;
			}
			gui.setLineNumberOfFile(lineCounter);
		} catch (Exception e)
		{
			e.printStackTrace();
		}
		System.out.println(lineHashMap.size());
		
	}
	
	@Override
	public void actionPerformed(ActionEvent e)
	{
		if(e.getSource().equals(loadLogFileJButton))
		{
			JFileChooser fileChooser = new JFileChooser();
			if(fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION)
			{
				logFile = fileChooser.getSelectedFile();
				parseLogFileToHashMap();
			}
		}
	}

	public String[] prepareTextForTextArea(int lineNumber)
	{
		String[] text = new String[50];
		for (int i =0;i< 50;i++)
		{
			text[i] = lineHashMap.get(lineNumber+i);
			
		}
		return text;
	}
}



Gut oder mal anderst gefragt, wie programmiert man einen texteditor der 10 gig große logfiles öffnen kann ohne 10 minuten zu laden ;)
Meine idee war dass ich später wenn das mal so klappt nur das nachlade was ich auch brauch, also den schritt mit der hashmap möchte ich später wieder rausnehmen.
 

JavaNooby

Aktives Mitglied
Also im prinzip würds mir langen wenn ich wüsste wie ich die Verbdinung der Vertiaklen Scrollbar zur Textarea töte ^^
 

Ebenius

Top Contributor
Ich würde einen anderen Weg wählen: Eine eigene Implementation von AbstractDocument.Content die stets nur rund um die letzte Anfrage Daten vorhält. Diesen Content kann man dann an ein PlainDocument übergeben. Das ist zwar bei weitem nicht trivial, aber auch nicht komplizierter als das Scrollen vernünftig zu implementieren.

Um nur Deine Frage zu beantworten: JViewport ableiten und so implementieren / überschreiben:
Java:
final Point virtualViewPosition = new Point();

@Override
public Point getViewPosition() {
  return virtualViewPosition;
}

@Override
public void setViewPosition(Point p) {
  virtualViewPosition.setLocation(p);
  final Point p2 = super.getViewPosition();
  p2.x = p.x;
  super.setViewPosition(p2);
}
[Edit] Hab's getestet und das Beispiel oben grad nochmal geändert. Nicht wundern.

Ebenius
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
7 Java Swing: Wie JScrollPane zur JList hinzufügen? Java Basics - Anfänger-Themen 12
richis-fragen GlassPane über JScrollPane legen Java Basics - Anfänger-Themen 6
B Scrollbares Fenster (JScrollPane) mit JPanel scrollt nicht Java Basics - Anfänger-Themen 3
L JScrollPane wird nicht angezeigt Java Basics - Anfänger-Themen 10
G Frage zu JScrollPane Java Basics - Anfänger-Themen 12
M JScrollPane scrollt nicht Java Basics - Anfänger-Themen 2
D JScrollPane mit TextArea Java Basics - Anfänger-Themen 5
N JList + DefaultListModel + JScrollPane --> ensureIndexIsVisible funktioniert nicht immer Java Basics - Anfänger-Themen 1
T JScrollPane in den Code einbauen Java Basics - Anfänger-Themen 5
O JScrollPane zu gross für JTable Java Basics - Anfänger-Themen 2
A JScrollPane nicht sichtbar Java Basics - Anfänger-Themen 5
S JScrollPane wird nicht angezeigt Java Basics - Anfänger-Themen 6
N jScrollPane wird nicht angezeigt Java Basics - Anfänger-Themen 13
L Jscrollpane nach zoomen anpassen Java Basics - Anfänger-Themen 20
C JScrollPane + JTextArea scrollt nicht Java Basics - Anfänger-Themen 2
T JScrollPane nicht scrollbar (mit KSKB!) Java Basics - Anfänger-Themen 4
T JScrollPane: Slider programmgesteuert verschieben? Java Basics - Anfänger-Themen 4
Kenan89 JScrollPane, aber kein Scrollbalken Java Basics - Anfänger-Themen 4
T JScrollPane funktioniert nicht Java Basics - Anfänger-Themen 7
D jScrollPane Problem Java Basics - Anfänger-Themen 16
JStickman JTree, JScrollPane, Liste mit graphischer Suchleiste - Dateimanager Java Basics - Anfänger-Themen 10
A Button das JScrollPane aktualisiert Java Basics - Anfänger-Themen 11
S JScrollPane verhält sich nicht so wie gedacht Java Basics - Anfänger-Themen 2
T JScrollPane ganz runter Scrollen Java Basics - Anfänger-Themen 4
T JScrollPane resized nicht richtig... Java Basics - Anfänger-Themen 4
Z Label verschwindet in JScrollPane Java Basics - Anfänger-Themen 7
N JScrollPane repaint(); geht nicht Java Basics - Anfänger-Themen 4
R JScrollPane in JTextArea benutzen Java Basics - Anfänger-Themen 10
L JPanel vergrößern bis JScrollPane nicht mehr zu sehen Java Basics - Anfänger-Themen 7
O JScrollPane , JScrollBar Java Basics - Anfänger-Themen 3
Z JScrollPane zeigt Zeit als Datum Java Basics - Anfänger-Themen 5
E Breite des Schiebers in JscrollPane verändern Java Basics - Anfänger-Themen 2
T JScrollPane soll rechts gescrollt gezeichnet werden Java Basics - Anfänger-Themen 5
P JScrollPane Java Basics - Anfänger-Themen 18
J JScrollPane, Regler-Problem Java Basics - Anfänger-Themen 3
H JTable in JScrollPane: Scrollbar wird nicht angezeigt. Java Basics - Anfänger-Themen 2
H2SO3- JScrollPane will nicht scrollen Java Basics - Anfänger-Themen 3
_deleted Mehrere Panels untereinander im JScrollPane Java Basics - Anfänger-Themen 4
J JScrollPane wird nicht angezeigt Java Basics - Anfänger-Themen 4
A JScrollPane aktualisiert nicht Java Basics - Anfänger-Themen 2
C jTabbedPane JScrollPane und jPanel Java Basics - Anfänger-Themen 3
S JScrollPane und JPanel Java Basics - Anfänger-Themen 2
J JScrollBar JScrollPane Java Basics - Anfänger-Themen 9
Q Anwendung eines JScrollPane Java Basics - Anfänger-Themen 2
M JScrollPane Java Basics - Anfänger-Themen 7
M Probleme mit JScrollPane Java Basics - Anfänger-Themen 5
G JScrollPane Java Basics - Anfänger-Themen 5
S JScrollPane: Scrollbalken werden nicht angezeigt Java Basics - Anfänger-Themen 4
P Brauche Hilfe für JPanel im JScrollPane und Abstände Java Basics - Anfänger-Themen 2
M VisualEditor, Jlist und JScrollPane Java Basics - Anfänger-Themen 9
M JScrollPane soll inhalt zentrieren Java Basics - Anfänger-Themen 3
C Automatischer Umbruch bei JScrollPane? Java Basics - Anfänger-Themen 5
G JScrollPane + JTable + Autoscroll uvm. Java Basics - Anfänger-Themen 5
N JScrollPane mit JTextArea Java Basics - Anfänger-Themen 4
I Autoscrolling im JScrollPane Java Basics - Anfänger-Themen 3
H JScrollPane -> Problem bei ScrollBar Java Basics - Anfänger-Themen 3
lin JScrollPane & OutOfMemoryError Java Basics - Anfänger-Themen 6
G JScrollPane in der Größe bestimmen Java Basics - Anfänger-Themen 11
R JScrollpane problem Java Basics - Anfänger-Themen 21
P JScrollPane an JTextArea anhängen Java Basics - Anfänger-Themen 3
C JScrollPane ohne Rahmen? Java Basics - Anfänger-Themen 2
M JScrollPane Java Basics - Anfänger-Themen 4
G Probleme mit JScrollPane Java Basics - Anfänger-Themen 3
M JScrollPane: Autoscroll Java Basics - Anfänger-Themen 14
J SWING UI Designer und zeichnen Java Basics - Anfänger-Themen 4
G Maven Swing: Wie verwende ich WindowListener ? Java Basics - Anfänger-Themen 2
C Threads und Swing Java Basics - Anfänger-Themen 9
A Swing: Raumshiff Java Basics - Anfänger-Themen 3
U Warum kriege ich hier eine nullpointer exception, sehe den Fehler nicht (swing) Java Basics - Anfänger-Themen 1
nbergmann Wo ist javax.swing.JOptionPane gespeichert? Java Basics - Anfänger-Themen 4
StevenGG Java swing "New Integer" Java Basics - Anfänger-Themen 5
T Java Swing - Dreieck zeichnen mit verschiedenen Variablen Java Basics - Anfänger-Themen 8
O ImageIcon, Swing Java Basics - Anfänger-Themen 1
O Swing JPanel Java Basics - Anfänger-Themen 4
F Swing - Fehler - Paint Methode Java Basics - Anfänger-Themen 7
M Input/Output Java Swing: Prüft ob Text aus JTextField ausschließlich Integer enthält Java Basics - Anfänger-Themen 15
mobaer Swing Timer stoppen Java Basics - Anfänger-Themen 3
M Wie kann ich hier ein Textfeld hinzufügen Java Swing? Java Basics - Anfänger-Themen 1
M SpielMenü mit Swing Java Basics - Anfänger-Themen 3
M Wie kann ich eine Eingabe im Java-Swing übergeben? Java Basics - Anfänger-Themen 1
N javax swing JOptionPane Hilfe Java Basics - Anfänger-Themen 3
H Swing Button hat falsche Größe Java Basics - Anfänger-Themen 5
C Der Swing Layout-Manager hasst mich Java Basics - Anfänger-Themen 4
M Java swing im Browser starten Java Basics - Anfänger-Themen 0
M JavaFX in Swing-Applikationen einbetten Java Basics - Anfänger-Themen 5
Z Threads SWING mit EventQueue.invokeLater Java Basics - Anfänger-Themen 1
P JDK installieren javac behauptet Javax.swing existiert nicht Java Basics - Anfänger-Themen 8
K Ascii Converter mit Swing Java Basics - Anfänger-Themen 4
b1ck Interface Verständnisfrage zum GUI mit "swing" Java Basics - Anfänger-Themen 1
N Erste Schritte Karte in SWING Application Java Basics - Anfänger-Themen 4
D Mehrfacherfassung in Swing GUI Java Basics - Anfänger-Themen 12
D Datum aus Swing in MySQL DB speichern Java Basics - Anfänger-Themen 22
R warum kann System.out.println(..) etwas, was Swing-Elemente Nicht können ? Java Basics - Anfänger-Themen 11
J Input/Output Charset Swing- Eingaben? Java Basics - Anfänger-Themen 8
S JUnit - Swing- Anwendung wird nicht neu gestartet Java Basics - Anfänger-Themen 0
Q Threads Threads in Swing Anwendungen Java Basics - Anfänger-Themen 5
B Swing intstalliert Eclips{}, mackiert Rot Java Basics - Anfänger-Themen 6
U Java Swing Timer mit ButtonKlick starten u. nach 12 Sekunden Befehl ausführen Java Basics - Anfänger-Themen 7
S Input/Output In Java Swing auf Button warten? Java Basics - Anfänger-Themen 9
N Problem mit Swing Textfeld und Zugriff aus anderer Klasse Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben