JTextArea: einzelne Zeile löschen?

ThePatch

Grünschnabel
Hallo zusammen,
ich habe folgendes Problem: in meiner Java Application gibt es ein TextField, eine TextArea und 3Button.
1 Button: liest den Text aus dem TextField aus und kopiert ihn in die Textarea
2 Button: löscht den gesamten Inhalt der TextArea
3 Button: soll eine einzelne Zeile in der Textarea löschen.

Die ersten 2 Button sind kein Problem, aber der dritte.... Kann mir jmd helfen dieses Problem zu lösen?

ThX schon mal

Source:
Code:
import javax.swing.*;
import javax.swing.text.BadLocationException;

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


public class Execute extends JFrame implements ActionListener{
    
    private static final long serialVersionUID = 1L;
    JMenuBar mb = new JMenuBar();
    JTextField tf = new JTextField(10);
    JTextArea ta = new JTextArea(10,10);
    JButton b1 = new JButton("Text einfügen");
    JButton b2 = new JButton("Zeile löschen");
    JButton b3 = new JButton("Alles löschen");
    
        public Execute(){
            super("Beleg");
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);            
            
            JPanel contp = new JPanel();
            contp.setLayout(new BorderLayout());            
            contp.add(tf,BorderLayout.NORTH);
            contp.add(ta,BorderLayout.CENTER);
            ta.setEditable(false);
            Box box1 = Box.createHorizontalBox();        
            box1.add(b1);
            box1.add(b2);
            box1.add(b3);
            contp.add(box1,BorderLayout.SOUTH);
        
            //actionlistener
            b1.addActionListener(this);
            b2.addActionListener(this);
            b3.addActionListener(this);
            
            
            
          //Menu
            JMenu m1 = new JMenu("Datei");
            JMenu m2 = new JMenu("?");
            JMenuItem beenden = new JMenuItem("Beenden");
            JMenuItem info = new JMenuItem("Info");
            m1.add(beenden);
            m2.add(info);
            
            mb.add(m1);
            mb.add(m2);
            setJMenuBar(mb);
            
            setContentPane(contp);    
        }
                
                        
                    
    public static void main(String[] args) {
        
        Execute l1 = new Execute();
        l1.setSize(500,300);
        l1.setLocation(200,200);
        l1.setVisible(true);
    }



	public void actionPerformed(ActionEvent e) {
		
		String value = e.getActionCommand();
		
		String content = tf.getText();
		
		//insert
		if (value.equals("Text einfügen")){
			ta.insert(content + "\n\r",0);
			tf.setText("");
		}
		//delete line
		if (value.equals("Zeile löschen")){
						
		}
		//delete all
		if (value.equals("Alles löschen")){
			ta.setText("");
			tf.setText("");
		}
		
	}

}
 
Hi,

ein möglicher Lösungsansatz wäre evtl., dass Du nach dem vergangenen CR (CarriageReturn) suchst, und die Zeichenkette bis zum nächsten Vorkommen von CR durchsuchst und dann aus der gesamten Zeichenkette entfernst, da Du danach auch die Positionen hast: Java-Funktionen wie "substring" und "indexOf" / "lastIndexOf" sollten das schaffen ;)
 
Oder du nimmst die JTextArea eigenen Methoden (siehe API)

Java:
            int start;
            int end;
            int count = -1;
            try {
                count = txt1.getLineCount();
                if(count > 0){
                    start = txt1.getLineStartOffset(count -1);
                    end = txt1.getLineEndOffset(count -1);
                    if(count > 1){
                        //Sorgt dafür, dass das \n auch gelöscht wird.
                        start = start - 1;
                    }
                    txt1.replaceRange(null, start, end);
                }
            } catch (BadLocationException e1) {
                e1.printStackTrace();
            }

Sieht mehr aus als es ist ... du besorgst dir im Prinzip einfach die letzte Zeile über getLineCount(). Suchst die die Offsets zu der Zeile (Anfang und Ende) (dabei noch dafür sorgen, dass das /n auch gelöscht wird!) und "ersetzt" die Zeile mit nichts (-->löschen)

Der Rest davon ist Fehlerbehandlung/vermeidung.

Obs noch einfacher geht weiß ich leider nicht.

MfG
Daniel
 
Gern geschehen :)
Wäre nett wenn du noch den Thread als erledigt abharkst, wenn du keine weiteren Fragen zu dem Thema hast?

MfG
Daniel
 
Hallo ich habe dazu auch ein Problem. Ich habe sowas wie einen Storno Button in meinem Programm und will das die letzte Zeile gelöscht wird. Habe den Code von Lacoon übernommen der mir allerdings nicht die letzte zeile löscht sondern irgendwo irgendwas**** weiß einer Rat?
 
Waere das einfachste nicht, jede Zeile in nem Array zu haben, und einfach das Array im Textfeld auszugeben. Sobald man dann im Array was aendert (loeschen, hinzufuegen etc) aendert sich die Anzeige im Textfeld auch :)
 

Neue Beiträge

Zurück