Probleme mit der Selektion einer JTextArea

mrbela

Bekanntes Mitglied
Hallo Leute!

Hier erstmal mein Code

Java:
package mvc.views;

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JTextArea;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JCheckBox;

public class AnalyserTextSelector extends JFrame {

	private JPanel contentPane;
	private JCheckBox chckbxSelectAll;
	private final JCheckBox chckbxRememberMyDecision;
	private final JTextArea textarea;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					AnalyserTextSelector frame = new AnalyserTextSelector("blub", "Dies ist ein Probetext\n\n!!!");
										
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}


	/**
	 * 
	 * 
	 * @param title should be the filename
	 */
	public AnalyserTextSelector(String title, String textareaText) {
		setTitle(title);
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 495, 401);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		textarea = new JTextArea();
		textarea.setBounds(10, 31, 459, 288);
		textarea.setEditable(false);
		textarea.setText(textareaText);
		textareaSelectAll();
		contentPane.add(textarea);
		
		JLabel lblSetTheText = new JLabel("Select the text, that should be analysed:");
		lblSetTheText.setBounds(10, 11, 239, 14);
		contentPane.add(lblSetTheText);
				
		chckbxSelectAll = new JCheckBox("Select all");
		chckbxSelectAll.setBounds(10, 333, 83, 23);
		chckbxSelectAll.setSelected(true);
		chckbxSelectAll.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				if (chckbxSelectAll.isSelected()) {
				
					chckbxRememberMyDecision.setEnabled(true);
					textareaSelectAll();
				} else {
					chckbxRememberMyDecision.setSelected(false);
					chckbxRememberMyDecision.setEnabled(false);
					textareaDeselectAll();
				}
			}
		});
		contentPane.add(chckbxSelectAll);
				
		chckbxRememberMyDecision = new JCheckBox("remember my decision");
		chckbxRememberMyDecision.setBounds(95, 333, 169, 23);
		contentPane.add(chckbxRememberMyDecision);

		
		JButton btnOk = new JButton("OK");
		btnOk.setBounds(380, 329, 89, 23);
		btnOk.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				
				System.out.println(textarea.getSelectedText());
							
				if (textarea.getSelectedText() == null) {
					
					
					JOptionPane.showMessageDialog(null,
						    "You have to select any text...",
						    "Warning",
						    JOptionPane.WARNING_MESSAGE);
				} else {
				
					// TODO
					
					
				}
			}
		});
		contentPane.add(btnOk);
		
//		setVisible(true);
	}
		
	private void textareaSelectAll() {
		textarea.setSelectionStart(0);
		textarea.setSelectionEnd(textarea.getText().length());
	}
	
	private void textareaDeselectAll() {
		textarea.setSelectionStart(0);
		textarea.setSelectionEnd(0);
	}
}

Mein Problem ist folgendes:

Ich will einen Dialog schreiben, in dem der User Text selektieren kann, der dann durch einen Klick auf den Button weiterverarbeitet wird. Zu Beginn ist alles selektiert (mit textareaSelectAll()) und es ist schön gehighlighted, wie man es kennt. Klicke ich jetzt aber auf einen Button (oder Comobox, oder sonstiges), so ist der Text nicht mehr selektiert (auch optisch nicht mehr). Rufe ich jetzt meine (über eine Checkbox "select all") wieder die textareaSelectAll auf, so hat er zwar mit textarea.getSelectedtext den ganzen Text selektiert, aber visuell überhaupt nicht...

Wie kriege ich das Problem gelöst?

Hoffentlich wisst Ihr was ich meine.. 😉

Danke für die Hilfe!
 
Hey,

erstmal danke für die schnelle Hilfe!

Habe auch fast einen Bug vermutet, denn das kam mir echt komisch vor.

Ist denn auf der Seite des Bugs, die Du gepostet hattest, auch ne Lösung für das Prob drauf?!

Werd mir gleich ma textarea.getCaret().setSelectionVisible(true); zu gemüte ziehen.

danke!

EDIT: das textarea.getCaret().setSelectionVisible(true) bringt genau die Lösung!! Danke

kurz aus Interesse: wie kommt auf so einen Trick?! google?
 
Zuletzt bearbeitet:
Es ist ja kein echter "Bug", zumindest wurde es nicht als solcher klassifiziert - eher ein "unerwartetes Verhalten". Ich hab' übrigens tatsächlich gegooglet, mit dem Wort "bug" dabei, weil es mir auch... ja, eben SEHR "unerwartet" vorkam 😀
 

Neue Themen


Zurück
Oben