Hallo
Das das andere Forum zu gemacht hat und die einzige Antwort ein Link zu diesem Forum war und im anderen sich iwie nix mehr tut, poste ich mein Problem hier nochmal:
Also ich habe mir einen Text-Editor gebastelt (steckt noch in den Kinderschuhen :P) und hab nun ein Problem.
Ich will eine Suchfunktion nach bestimmten Text-Passagen reinmachen, eine Suchen-&-Ersetzen Funktion habe ich bereits. Die Suchfunktion soll eine Text-Passage suchen und wenn Sie gefunden wurde, markieren. Allerdings klappt das nicht so ganz. Es soll halt so sein, das alle entsprechenden Textstellen markiert werden sollen und sie sollen markiert bleiben, bis man woanders hinklickt oder sonstwas tut, wie ganz normal mit der aus markieren halt.
Hier erstmal die (denke ich) wichtigsten bzw. betroffenen Stellen bzw. Klassen:
Die Ersetzen-Funktion
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.regex.Pattern;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Ersetze {
JDialog replaceDialog;
JTextField replaceOldTextField = new JTextField(15);
JLabel replaceOldLabel = new JLabel("Ersetze:");
JTextField replaceNewTextField = new JTextField(15);
JLabel replaceNewLabel = new JLabel("Durch:");
static JButton replaceOkay = new JButton("OK");
JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
JPanel textPanelOld = new JPanel(new FlowLayout(FlowLayout.CENTER));
JPanel textPanelNew = new JPanel(new FlowLayout(FlowLayout.CENTER));
private boolean isSearched = false;
public Ersetze() {
replaceDialog = new JDialog();
replaceDialog.setResizable(false);
replaceDialog.setTitle("Ersetze...");
// replaceDialog.setSize(new Dimension(300, 200));
replaceDialog.setModal(true);
replaceOkay.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
String searched = replaceOldTextField.getText();
String newText = replaceNewTextField.getText();
String source = EditorPane.textArea.getText();
String markedText = source.replaceAll("(" + Pattern.quote(searched) + ")", newText);
System.out.println(markedText);
EditorPane.textArea.setText(markedText);
isSearched = false;
replaceDialog.setVisible(false);
}
});
buttonPanel.add(replaceOkay, BorderLayout.SOUTH);
textPanelOld.add(replaceOldLabel);
textPanelOld.add(replaceOldTextField, BorderLayout.NORTH);
textPanelNew.add(replaceNewLabel);
textPanelNew.add(replaceNewTextField);
replaceDialog.add(textPanelOld, BorderLayout.NORTH);
replaceDialog.add(textPanelNew);
replaceDialog.add(buttonPanel, BorderLayout.SOUTH);
KeyListener buttonOK = new KeyAdapter() {
@Override
public void keyPressed(KeyEvent ke) {
if (!isSearched) {
if (ke.getKeyCode() == KeyEvent.VK_ENTER) {
replaceOkay.doClick();
isSearched = true;
}
}
}
};
replaceOldTextField.addKeyListener(buttonOK);
replaceNewTextField.addKeyListener(buttonOK);
replaceDialog.setPreferredSize(new Dimension(300, 125));
replaceDialog.pack();
replaceDialog.setVisible(true);
}
private static boolean containsString(String source, String searched) {
return source.indexOf(searched) > -1 ? true : false;
}
} ```
Meine TextArea (Auch schon mit JEditorPane versucht und dann mit HTML-Tags, aber uich konnte die Standard-Schriftfarbe nicht von Schwarz auf Cyan ändern und so bringt mir das nix.)
```package TextEditor;
import java.awt.Color;
import java.awt.Image;
import java.io.File;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class TextArea {
Image Bild;
File BildFile;
static JTextArea textArea = new JTextArea();
static JScrollPane scrollPane;
public TextArea() {
textArea.setBackground(Color.BLACK);
textArea.setForeground(Color.CYAN);
textArea.setCaretColor(Color.CYAN);
textArea.setComponentPopupMenu(Fenster.popup);
scrollPane = new JScrollPane(textArea);
scrollPane.setWheelScrollingEnabled(true);
scrollPane.setComponentPopupMenu(Fenster.popup);
}
}
Meine Finde-Funktion:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.regex.Pattern;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Finde {
static JDialog findDialog;
JTextField findTextField = new JTextField(15);
static JButton findOkay = new JButton("OK");
JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
JPanel textPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
private boolean isSearched;
public Finde() {
findDialog = new JDialog();
findDialog.setResizable(false);
findDialog.setTitle("Finde...");
findDialog.setSize(new Dimension(300, 100));
findDialog.setModal(true);
findOkay.addActionListener(new ActionListener() {
@Override
@SuppressWarnings("ResultOfMethodCallIgnored")
public void actionPerformed(ActionEvent ae) {
String searched = findTextField.getText();
String source = TextArea.textArea.getText();
String markedText = source.replaceAll("(" + Pattern.quote(searched) + ")", "<b>$1</b>");
System.out.println(markedText);
TextArea.textArea.setText(markedText);
isSearched = false;
findDialog.setVisible(false);
}
});
buttonPanel.add(findOkay, BorderLayout.SOUTH);
textPanel.add(findTextField, BorderLayout.NORTH);
findDialog.add(textPanel, BorderLayout.NORTH);
findDialog.add(buttonPanel, BorderLayout.SOUTH);
KeyListener buttonOK = new KeyAdapter() {
@Override
public void keyPressed(KeyEvent ke) {
if (!isSearched) {
if (ke.getKeyCode() == KeyEvent.VK_ENTER) {
findOkay.doClick();
isSearched = true;
}
}
}
};
findTextField.addKeyListener(buttonOK);
findDialog.setVisible(true);
findDialog.pack();
}
private static boolean containsString(String source, String searched) {
return source.indexOf(searched) > -1 ? true : false;
}
}
(Die Methode am Ende war ein Versuch ausem Internet mein Vorhaben zu realisieren, kann eig weg, da ich ja eine andere gefunden habe)
Das müssten die Relevanten Klassen sein, wenn ich eine vergessen habe, sagt es mir