Programm hängt sich auf wenn ich in JPanel ein JScrollPane einfüge

JDF1976

Mitglied
Hallo leute,

ich mach grad ein Tutorial durch und stoße da auf ein Problem.

Ich erstelle folgendes:
Java:
public JPanel buildTimelinePanel() {
		JPanel timelinePanel = new JPanel(new BorderLayout());
		timeline.setBorder(BorderFactory.createTitledBorder("Timeline"));
		// TextArea
		timeline.setEditable(false);
		timelinePanel.add(timeline, BorderLayout.CENTER);
		
		
		// Button
		JPanel timelineButtonPanel = new JPanel(new BorderLayout());
		JButton timelineButton = new JButton("Tweets holen");
		timelineButton.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("tweets werden geholt");
				new TimelineWorker().execute();
			}
		});
		timelineButtonPanel.add(timelineButton, BorderLayout.WEST);
		timelinePanel.add(timelineButtonPanel, BorderLayout.SOUTH);
		return timelinePanel;
	}

so geht auch alles nur das ich in der textarea (hier timeline) kein Scrollbalken habe.
Diesen soll ich bekommen wenn ich folgende zeile wie folgt anpasse:
Java:
//timelinePanel.add(timeline, BorderLayout.CENTER);
timelinePanel.add(new JScrollPane(timeline), BorderLayout.CENTER);

doch nun hängt sich mein Programm auf sobald ich was in die TextArea schreiben will.

was kann das denn sein?

Dankbar für jede hilfe.

Gruß Jörg

Hier mal der komplette Code der Klasse.
Java:
import java.awt.BorderLayout;
import java.awt.ScrollPane;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JProgressBar;

import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.SwingWorker;

import twitter4j.Status;

public class ZwietschiGUI {

	private Zwietschi zwietschie = new Zwietschi();
	private final JTextField statusText = new JTextField();
	private final JTextArea timeline = new JTextArea();
	private final JProgressBar progressBar = new JProgressBar();

	class StatusWorker extends SwingWorker<Void, Void> {

		@Override
		protected Void doInBackground() throws Exception {
			progressBar.setIndeterminate(true);
			zwietschie.setStatus(statusText.getText());
			return null;
		}

		@Override
		protected void done() {
			progressBar.setIndeterminate(false);
		}
	}

	class TimelineWorker extends SwingWorker<Void, Void> {

		@Override
		protected Void doInBackground() throws Exception {
			progressBar.setIndeterminate(true);
			timeline.setText("");

			List<Status> status = zwietschie.getTimeline();
			for (Status st : status) {

				timeline.append(st.getCreatedAt() + " "
						+ st.getUser().getName() + ": " + st.getText() + "\n");
			}
			return null;
		}

		protected void done() {
			progressBar.setIndeterminate(false);
		}

	}

	public JPanel buildStatsPanel() {
		// Panel, Text
		JPanel statusPanel = new JPanel(new BorderLayout());
		statusPanel.setBorder(BorderFactory.createTitledBorder("Status"));
		statusPanel.add(statusText, BorderLayout.CENTER);
		// Button
		JButton statusButton = new JButton("Senden");
		statusButton.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				System.out.println("Versenden wurde gedrückt");
				new StatusWorker().execute();
			}
		});
		JPanel statusButtonPanel = new JPanel(new BorderLayout());
		statusButtonPanel.add(statusButton, BorderLayout.WEST);
		statusPanel.add(statusButtonPanel, BorderLayout.SOUTH);
		return statusPanel;
	}

	public JPanel buildTimelinePanel() {
		JPanel timelinePanel = new JPanel(new BorderLayout());
		timeline.setBorder(BorderFactory.createTitledBorder("Timeline"));
		// TextArea
		timeline.setEditable(false);
		timelinePanel.add(new JScrollPane(timeline), BorderLayout.CENTER);

		// Button
		JPanel timelineButtonPanel = new JPanel(new BorderLayout());
		JButton timelineButton = new JButton("Tweets holen");
		timelineButton.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("tweets werden geholt");
				new TimelineWorker().execute();
			}
		});
		timelineButtonPanel.add(timelineButton, BorderLayout.WEST);
		timelinePanel.add(timelineButtonPanel, BorderLayout.SOUTH);
		return timelinePanel;
	}

	public JPanel buildProgressPanel() {
		JPanel progresspanel = new JPanel();
		progresspanel.setBorder(BorderFactory.createTitledBorder("Aktivität"));
		progresspanel.add(progressBar);
		return progresspanel;
	}

	public JFrame createFrame() throws Exception {
		JFrame frame = new JFrame();
		frame.setSize(400, 400);
		frame.setLocation(500, 500);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.add(buildStatsPanel(), BorderLayout.NORTH);
		frame.add(buildTimelinePanel(), BorderLayout.CENTER);
		frame.add(buildProgressPanel(), BorderLayout.SOUTH);

		//
		zwietschie.login();
		//
		return frame;
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		SwingUtilities.invokeLater(new Runnable() {

			@Override
			public void run() {
				ZwietschiGUI gui = new ZwietschiGUI();
				JFrame main;
				try {
					main = gui.createFrame();
					main.setVisible(true);
				} catch (Exception e) {

					e.printStackTrace();
				}

			}
		});

	}

}

Also ich habs nun ein wenig eingekreist.
Das Programm hängt sich erst dann auf wenn ich eine zweite Zeile in die TextArea einfügen will.
evtl. hilft das ja.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück