GUI Texteditor

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo,
müssen einen Texteditor schreiben, aber komm unten beim dem Button ausschneiden nicht weiter.
Wäre gut, wenn jm. einen Vorschlag hat wie ich in den Text ausschneide.

Gruß

Code:
import simpleGui.*;
import java.awt.Color;

public class Texteditor extends SFrame
{
    String pfad = "";
    String text = "";
    STextArea textfeld = new STextArea (0, 100, 1000, 400, "", this);
    SButton btnoeffnen = new SButton (2, 2, 40, 30, "open.png","öffnen", this);
    SButton btnspeichern = new SButton (45, 2, 40, 30, "speichern.jpg","speichern", this);
    SButton btnspeichernunter= new SButton (87, 2, 40, 30, "speichernUnter.jpg","speichern unter", this);
    SButton btnneuesDokument = new SButton (132, 2, 40, 30, "neuesDokument.jpg","neues Dokument", this);
    SButton btnkopieren = new SButton (500, 2, 40, 30, "kopieren.jpg","kopieren", this);
    SButton btneinfuegen = new SButton (545, 2, 40, 30, "einfuegen.jpg","einfügen", this);
    SButton btnausschneiden = new SButton (586, 2, 40, 30, "ausschneiden.jpg","ausschneiden", this);
    SButton btnfett = new SButton (2, 60, 40, 30, "bold.jpg","fett", this);
    SButton btnkursiv = new SButton (45, 60, 40, 30, "kursiv.jpg","kursiv", this);
    SButton btnunterstrichen = new SButton (88, 60, 40, 30, "unterstrichen.jpg","unterstreichen", this);
    SButton btnvergroeßern= new SButton (400, 60, 40, 30, "lupePlus.png","vergrößern", this);
    SButton btnverkleinern = new SButton (443, 60, 40, 30, "lupeMinus.png","verkleinern", this);
    SButton btnvorschau = new SButton (586, 60, 40, 30, "vorschau.jpg","Vorschau", this);
    SChoice auswahlSchrift = new SChoice (170, 60, 80, 25, new String[] {"Arial","Andy MT","Courier","Monotype Sorts", "Luxi Sans","Simpsons","Thorndale AMT","URW Chancery L"}, this);
    SChoice auswahlGroeße = new SChoice ( 255, 60, 120, 25, new String[] {"6","8","10","12","13","14","15","16","17","18","19","20","30","40", "50","60","70","80","90","100"}, this);
    SFileChooser oeffnen = new SFileChooser (45, 60, 40, 30, "öffnen",  this);
    SFileChooser speichern = new SFileChooser (45, 60, 40, 30, "speichern",  this);
    
    public Texteditor()
    {
        super(645, 500, "Texteditor");
        this.setBounds(0,0,645,500);
        this.setVisible(true);
        this.getContentPane().setBackground(new java.awt.Color(238, 216, 174));
        textfeld.textArea.setBackground(new java.awt.Color(255, 231, 186));
        textfeld.textArea.setLineWrap(true);
    }
    public void actionPerformed(java.awt.event.ActionEvent e)
    {
       if(e.getSource() == btnoeffnen)
       {
           if(textfeld.hasChanged())
           {
               int dialog = SDialog.showYesNoCancelDialog("speichern ?", "Wollen Sie ohen zu speichern ein neues Dokument öffnen",this);
               if(dialog == SDialog.YES_OPTION)
               {
                   this.pfad=oeffnen.openDialog();
                   textfeld.setText(SFile.readText(this.pfad));
               }
           }
           else
           {
               this.pfad=oeffnen.openDialog();
               textfeld.setText(SFile.readText(this.pfad));
           }        
       }
       if(e.getSource() == btnspeichern)
       {    
               SFile.saveText(this.pfad, textfeld.getText());
       }
       if(e.getSource() == btnspeichernunter)
       {
               this.pfad=speichern.saveDialog();
               SFile.saveText(this.pfad, textfeld.getText());
       }
       if(e.getSource() == btnneuesDokument)
       {
           int dialog = SDialog.showYesNoCancelDialog("speichern ?", "Wollen Sie ohne zu speichern ein neues Dokument öffnen", this);
           if(dialog == SDialog.YES_OPTION)
           {
               textfeld.setText("");
               pfad="";
           }
           if(dialog == SDialog.NO_OPTION)
           {
               this.pfad = speichern.saveDialog();
               SFile.saveText(this.pfad, textfeld.getText());
           }
       }
       if(e.getSource() == btnfett)
       {
       }
       if(e.getSource() == btnkopieren)
       {       
           SClipboard.setText(textfeld.getSelectedText());
       }
       if(e.getSource() == btneinfuegen)
       {
           textfeld.insert(SClipboard.getText());
       }
       if(e.getSource() == btnausschneiden)
       {
          
       }
    }
}
:cool: :cool: :cool: :cool: :cool:
 
S

SlaterB

Gast
was zum Teufel ist denn eine STextArea?


ganzen Text rausholen, selektierten Text entfernen (auf genaue Position achten), Resttext wieder reinschreiben?
 

siroFranz

Bekanntes Mitglied
STextArea ist ein mehrzeiliges Textfeld aus der SimpleGui

aber krieg den code fürs ausschneiden nicht auf die Reihe?

Gruß
 

Caffè Latte

Bekanntes Mitglied
Hi,

folgende Methoden kennt das JTextArea (was ja wohl ein mehrzeiliges Textfeld ist - oder?):

public void cut()
Entfernt die Selektion und kopiert den Text in die Zwischenablage.

public void copy()
Kopiert die Selektion in die Zwischenablage.

public void paste()
Fügt den Text aus der Zwischenablage ein.

Ich habe jetzt deinen Code nicht ausprobiert, aber mit den oben genannten Methoden reicht eine Zeile Code um das Gewollte zu erreichen.
 

siroFranz

Bekanntes Mitglied
Wieso steht den bei mir oben STextArea

und wo finde ich die ganzen Methoden, die ich damit ausführen kann?
Gruß0
 

DocRandom

Top Contributor
SlaterB hat gesagt.:
was zum Teufel ist denn eine STextArea?

..ist vermutlich eine abgespeckte verion der JTextAera.
Da der Gast ja geschrieben hat:
..müssen einen Texteditor schreiben,..

Ich vermute das der eben diese SimpleGUI einsetzen muß um den TextEditor zu schreiben.
Und da sind höchstwahrscheinlich die div. Methoden der normalen JTextAera gesperrt oder nicht vorhanden!

mfg
DOcRandom
 

DocRandom

Top Contributor
..gar nicht!
Du mußt sie selber implementieren, sprich schreiben!
Ist ja Sinn und Zweck der Aufgabe!

mfg
DocRandom
 

siroFranz

Bekanntes Mitglied
lol hab die Methode cut() jetzt in JTextComponent gefunden !
Aber was muss ich da importieren, weil der findet die Methode nicht ?

Gruß
 

DocRandom

Top Contributor
..nochmal für die ganz langsamen Denker:
  • Gehi(r)n einschalten
  • nachdenken
  • a..hhh, in der simpleGUI sind einige Objektmethoden nicht vorhanden!
  • d.H. man/frau muß diese selber implementieren (programmieren)
  • -
  • Pause machen, Kaffee trinken
  • sich überlegen wie man das lösen könnte
  • mal in den vorhandenen Code gucken, ob da nicht evtl. schon ein Lösungsansatz zu finden ist.
  • Lösungsweg entwickeln ( Papier und Bleistift sind da ganz hilfreich)
  • Programmieren
  • -
  • Kaffee u.o. Tee trinken
  • -
  • Testen, testen, testen, usw. usv.
mfg
DocRandom
 

siroFranz

Bekanntes Mitglied
ja aber komm da nicht drauf , programmier noch nicht sehr lange
hab die Methode doch gefunden ! was muss ich den jetzt machen,damit die läuft?
 

DocRandom

Top Contributor
..mit der Annahme das die Methode vorhanden ist, sollte der Befehl so:
Code:
textfeld.cut();
lauten
Das hat aber
Caffè Latte hat gesagt.:
public void cut()
Entfernt die Selektion und kopiert den Text in die Zwischenablage.

public void copy()
Kopiert die Selektion in die Zwischenablage.

public void paste()
Fügt den Text aus der Zwischenablage ein.
schon gepostet!

mfg
DocRandom
 

siroFranz

Bekanntes Mitglied
das ja nciht mein problem.
wenn ich die so anwende, kommt immer die Meldung cannot resolve symbol - method cut();

d.h. denke ich ma das ich da irgendwas importieren muss ?
das versteh ich nicht!

Gruß
 
S

SlaterB

Gast
importieren wird nie helfen bei einer nicht vorhandenen Operation,
hast du denn keine API zum nachschauen?

selber machen steht immer noch im Raum,
da hatte ich ja einen Vorschlag gepostet ;)
 

siroFranz

Bekanntes Mitglied
import javax.swing.text.JTextComponent; (würde darauf kommen, aber läuft leider nicht)

Musste doch auch die SimpleGui importieren, damit der die Methoden kann. Also muss ich doch jetzt auch was in der Art machen ?
Ich muss jetzt ma weiterkommen, wäre echt gut wenn du das mal posten könntest. (werde langsam verrückt)

Gruß
 

DocRandom

Top Contributor
kann man sich die simpleGUI wo runterladen?
Ich kann Deinen Code ned mal testen, da ich dieses Package ned hab!

mfg
DocRandom
 
S

SlaterB

Gast
diese Operation wäre nur interessant weinn die STextArea sie hätte,
das Objekt in dem DER TEXT DRIN LIEGT

was irgendwelche anderen Klassen auf der Welt haben interessiert doch nicht ;)

es wurde nur die Möglichkeit angedach, dass STextArea von JTextComponent erbt,
dann wäre diese Operation automatisch auch in STextArea,

dies scheint nicht der Fall zu sein, also vergiss es zunächst einmal,
noch mal: ohne API von STextArea wirst du nicht weit kommen,

was ist denn SimplGui, gibts dazu ne Webseite?
 
S

SlaterB

Gast
siehst ja selber, keine entsprechene Operation da,
sollst du selber machen,

die JTextArea in der STextArea kann das,
aber hat sicherlich seine Gründe, dass nur 3-4 simple Operationen nach außen verfügbar sind
 

siroFranz

Bekanntes Mitglied
Wäre gut, wenn du mir zu der cut() Methode einen Lösungsvorschlag posten könntest. Dann hab ich wenigsten ein Beispiel und kann dann weiter machen endlich!

Gruß
 
S

SlaterB

Gast
habe ich ganz am Anfang getan (in der ersten Antwort!) und auch schon einmal wiederholend darauf hingewiesen,
mit den zur Verfügung stehenden Mitteln gibt es auch gar keine andere Lösung

und es ist mir schleierhaft, wie du z.B. bei der Markierung eines einzelnen 'e'-Buchstabens herausfinden sollst,
welches der 500 'e' im Text nun entfernt werden muss,
das geht gar nicht mit diesen begrenzten Mitteln ;)

(edit: naja, die textArea ist public, also könntest du auf diese auch zugreifen.., ist dort das cut? :roll: )
Code:
package simpleGui;

public class STextArea 
{
    public javax.swing.JTextArea textArea =new javax.swing.JTextArea();
    [..]
    
   public STextArea(int x, int y, int width, int height, String text, SContainer container)
   public STextArea(String text, SContainer container)
   public STextArea(int width, int height, String text, SContainer container)
   public STextArea(String text,  SContainer container, Object constraints)
   
   public String getText()
   public String  getSelectedText()
   public void insert(String text)
   public void setText(String text)
   public void append(String text)
   public boolean hasChanged()
}
 

DocRandom

Top Contributor
..eine kl. Hilfestellung:
Code:
if(e.getSource() == btnausschneiden)
       {
    	   String markierung = ??????????;
    	   int pos = textfeld.getText().indexOf(markierung);
    	   if (pos > -1) {
    		   StringBuffer buff = new StringBuffer(textfeld.getText());
    		   buff.delete(pos, (????????.??????);
    		   SClipboard.setText(markierung);
    		   textfeld.setText(buff.toString());
    	   }
       }

..so den Rest ( ???????) mußt Du Dir selbst erarbeiten!
Achja, die Ifos dazu findest Du in den von mir geposteten Links!
Und es ist nicht die optimalste Lösung, sondern nur ein Lösungsvorschlag!

mfg
DocRandom
 

Caffè Latte

Bekanntes Mitglied
:D Lag ich wohl etwas daneben. Aber wer kann schon wissen, dass in einer abgeleiteten Klasse weniger Funktionalität steckt als in der Basisklasse ... Bei allen meinen Projekten ist das immer genau andersherum.

Demnächst vllt. darauf hinweisen und einen Link zu API posten.
 

DocRandom

Top Contributor
..nö, lagst Du nicht.
Es erging mir im ersten Moment gennauso, jedoch hat mein Nachhilfeschüler ähnliche Packages.
Daher wußte ich dann ziemlich schnell wo der Hase im Pfeffer begraben liegt!

Es stimmt aber schon, das man eine Klasse zum Erweitern ableitet!
Und bei obigem Fall wurde die sogar falsch abgeleitet, da man im Prinzip sogar auf die JTextArea zugreifen kann, immerhin wurde sie public deklariert!

Aber die Aufgabenstellung lag/liegt in der Richtung, das die Leutz das selber implementieren sollen!

mfg
DocRandom
 

siroFranz

Bekanntes Mitglied
möchte nun wenn z.B. im Textfeld "dick" steht und mann oben auf den btnfett Button drückt, dass der Text in "dick" steht.

Alos würde das so machen:

textfeld.getSelectedText(textfeld.insert(""));

lieder klappt das net!


Gruß
 

DocRandom

Top Contributor
..tjo, ein Programm ist nicht das was man will, sondern das was man schreibt! ;)

Also wenn Du auf den Button klickst und es soll der markierte Text noch mit den Attributen blaba versehen weden, dann ist folgendes zu tun:
  • markierten Text auslesen
  • neuen String erzeugen[list:560ea41278]
  • dem neuen String hinzufügen
    [*] dem neuen String den markierten Text hinzufügen
    [*] dem neuen String
    hinzufügen
[*] den markierten Text durch den neuen String ersetzen[/list:u:560ea41278]
warum hier kein Code zu finden ist?
Nunja, lernst Du Java, oder ich? :p

mfg
DocRandom
 

siroFranz

Bekanntes Mitglied
ok habs :cool:


textfeld.textArea.setFont(new Font(btnschrift.getText(), Font.PLAIN, textfeld.textArea.getFont().getSize() + 1));

mit dem code kann ich die Größe verändern, aber komm nur bis textfeld.textArea.setFont() hinterher.
Das danach versteh ich noch nciht wirklich?

Gruß
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben