Dodawanie tekstu na dowolnej pozycji

0

Witam ! Dopiero uczę się języka Java więc wiem że robie pewnie trochę błędów ale proszę o wyrozumiałość ;). Piszę program który będzie takim mini edytorem html. Koncepcja jest taka: Pasek narzędzi u góry, do tego dwa pola tekstowe. Jedno z edytorem tekstu po lewej a drugie nieedytowalne po prawej z wyświetlaniem podglądu tego co zostało już napisane w edytorze. Na razie napisałem coś takiego

import javax.swing.*;

import java.awt.*;
import java.awt.event.*;

public class Edytor {


	public static void main(String[] args) {
	RamkaEdytora okno = new RamkaEdytora();
	okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	okno.show();

	}

}
class RamkaEdytora extends JFrame
{
	public RamkaEdytora()
	{
		/**
		 Pobieramy rozmiar okna
		*/
	 
		Toolkit rozmiar = Toolkit.getDefaultToolkit();
		Dimension rozmiarEkranu = rozmiar.getScreenSize();
		int WYSOKOSC = rozmiarEkranu.height;
		int SZEROKOSC = rozmiarEkranu.width;
     
     /**
       Ustawianie wielkośći okna połowe do rozdzielczosci + ustawienie lokalizacji okna
	*/
     
		setSize(SZEROKOSC-100, WYSOKOSC-100);
		setLocation(1,1);
		setTitle("PROSTY EDYTOR TEKSTOWY");
		
		
		/**
		 *  Menu
		 */
		
		JMenuBar pasekMenu = new JMenuBar();
		JMenu menuPlik = new JMenu("Plik");
		JMenuItem zamknij = new JMenuItem("Zamknij");
		menuPlik.add(zamknij);
		zamknij.addActionListener(new 
	             ActionListener()
	             {
	                public void actionPerformed(ActionEvent zdarzenie)
	                {
	                   System.exit(0);
	                }
	             });
	   
	     
	     JMenu menuPomoc = new JMenu("Pomoc");
	     pasekMenu.add(menuPlik);
	     pasekMenu.add(menuPomoc);
	     setJMenuBar(pasekMenu);
	     
	     /**
	      * Dodajemy obszary tekstowe
	      */
	     
	     Container powZawartosci = getContentPane();
	     
	     obszar1 = new JTextArea(3,50);
	     obszar2 = new JEditorPane();
	     obszar1.setWrapStyleWord(true);
	     obszar2.setEditable(false);
	     obszar2.setContentType("text/html");
	     JScrollPane powPrzewijania = new JScrollPane(obszar1);
	     JScrollPane powPrzewijania2 = new JScrollPane(obszar2);
	     powZawartosci.add(powPrzewijania, BorderLayout.LINE_START);
	     powZawartosci.add(powPrzewijania2, BorderLayout.CENTER);
	     
	     /**
	      * Dodajemy pasek narzędzi
	      */
	     
	     JPanel pasekNarzedzi = new JPanel();
	     JButton HTML = new JButton("< html >");
	     pasekNarzedzi.add(HTML);
	     JButton HTMLe = new JButton("< / html >");
	     pasekNarzedzi.add(HTMLe);
	     JButton FONT = new JButton("< font color= >");
	     pasekNarzedzi.add(FONT);
	     	     
	     powZawartosci.add(pasekNarzedzi, BorderLayout.PAGE_START);
	     
	     /** akcja dla przycisków
	      * * 
	      * */
	     
	     
	     HTML.addActionListener(new ActionListener()
	     {
	    	 public void actionPerformed(ActionEvent zdarzenie)
				{
					obszar1.append("<html>");
				}
	     });
	     
	     
	     FONT.addActionListener(new ActionListener()
	      {
	    	 
	    	 public void actionPerformed(ActionEvent zdarzenie)
	    	 {	
	    		 obszar1.append("<font>");
	    	 }
	      });
	     
	     HTMLe.addActionListener(new ActionListener()
	     {
	    	 public void actionPerformed(ActionEvent zdarzenie)
	    	 {	
	    		 obszar1.append("</html>");
	    	 }
	    });
	     
	     //Przycisk podglądu
	     
	     JButton podglad = new JButton("Podglad");
	     powZawartosci.add(podglad, BorderLayout.PAGE_END);
	     
	     podglad.addActionListener(new ActionListener()
	     {
	    	 public void actionPerformed(ActionEvent e)
	    	 {
	    		 obszar2.setText(obszar1.getText());
	        }
	    	 });
	     
	     
	}
	
	 	private JTextArea obszar1;
	 	private JEditorPane obszar2;	
}

Chciałbym, żeby była możliwość dodawania tekstu w miejscu w którym jest aktualnie kursor, a nie na końcu. Czy ktoś może mi powiedzieć jak to zrobić ?

1

Metody insert i getCaretPosition.

0

dzięki kolego !! zrobiłem i działa tak jak chciałem

0

Mam jeszcze jedno pytanie kolego do Ciebie. Męczę się ze zrobieniem zapisu do pliku tzn. Zrobiłem tak że się zapisuje ale niestety wszystko w jednej linii, a chciałbym żeby było tak jak w obszarze edytora (obszar1)

 private class Zapisz implements ActionListener
	  {
		  public void actionPerformed(ActionEvent e) 
                 {
 
			  JFileChooser wybor = new JFileChooser();
	    	  wybor.setCurrentDirectory(new File("."));
	    	  FiltrRozszerzenia filtr = new FiltrRozszerzenia();
	    	  filtr.dodajRozszerzenie(".html");
	    	  filtr.zmienOpis("Pliki HTML");
	    	  wybor.setFileFilter(filtr);
	    	  int wynik = wybor.showSaveDialog(RamkaEdytora.this);
	    	  if (wynik == JFileChooser.APPROVE_OPTION)
	    	  {
	    		  try{
	    		  File plik = wybor.getSelectedFile();
	    		 	  plik.createNewFile();
	    	            BufferedWriter out = new BufferedWriter(new FileWriter(plik));
	    	            
	    	            out.write(obszar1.getText());
	    	            out.close();
	    	            JOptionPane.showMessageDialog(null, "PLIK ZAPSANY POMYŚLNIE");    
	    		  }
	    		  catch(IOException b){
	    		       System.out.println("Error");
	    		  }
             }
}
0

Na pewno zapisało się wielu wierszach, tylko windowsowy notatnik nie umie tego wyświetlić. Jeśli koniecznie musisz oglądać plik w notatniku, to

getText().replace("\n","\r\n");
0

rzeczywiście ;) nie spostrzegłem tego :P

a mam jeszcze pytanie. Jak zrobić, żebym mógł wstawić tekst <html></html> i żeby automatycznie kursor wskakiwał pomiędzy <html> a </html>

0

setCaretPosition

0

kurde.. męczę się i nie za bardzo wiem jak to wykonać za pomocą setCaretPoistion ;//

0

A w czym problem?

int n = ta.getCaretPosition();
ta.insert("<html></html>",n);
ta.requestFocus();
ta.setCaretPosition(n+6);

1 użytkowników online, w tym zalogowanych: 0, gości: 1