Nadanie pogrubienia pasującej frazie

0

Witam serdecznie!
Mam problem, bowiem chciałbym dodać do programu pewien mechanizm, który konwertowałby tekst w znacznikach np. <b>Tekst</b> na Tekst. Nie wiem jak zbytnio się do tego zabrać. Kombinowałem, żeby pójść w stronę wyrażeń regularnych i zamieniać wszystko za pomocą metody Matcher.replaceAll(), ale w ten sposób nie można dodać pogrubienia. Z czego mogę skorzystać, żeby to zrobić.

Bardzo prosiłbym o podpowiedzi jak dotrzeć do zamierzonego celu, a nie gotowe rozwiązanie :).

0

Korzystasz z JTextPane? Po zlokalizowaniu w Document odpowiednich fragmentów tekstu wykorzystaj metody remove i insertString z odpowiednim stylem.

0

Tak, korzystam z JTextPane. Udało mi się rozwiązać ten problem, chociaż chwilę mi to zajęło. Dziękuję za poświęcenie chwili na pomoc :). Zrobiłem to w ten sposób

if(e.getSource()==bTest)
		{
			notatnik.setText(notatnik.getText().replaceAll("\r\n", "\n")); //notatnik to mój JTextPane
			Pattern pattern = Pattern.compile("<b>([^<]*)</b>");
			Matcher m = pattern.matcher(notatnik.getText());
			Document doc = notatnik.getDocument();
			
			SimpleAttributeSet sa = new SimpleAttributeSet();
			sa.addAttribute(StyleConstants.Bold, Boolean.TRUE);
			int index;
	
			while(m.find())
			{
				 index = notatnik.getText().indexOf("<b>"+m.group(1)+"</b>");

				try
				{
					System.out.println(m.group(1));
					doc.remove(index,("<b>"+m.group(1)+"</b>").length());
					doc.insertString(index, m.group(1), sa);
				}
				catch(Exception e1)
				{
					e1.printStackTrace();
				}
				
			}
			
		}

Pozwolę sobie jeszcze na mały offtopic. Chodzi za mną pytanie, co to tak naprawdę znaczy działać na dokumencie np. textpane.getDocument()? Szukałem już informacji w google na ten temat, ale nie znalazłem takiej odpowiedzi, która rozjaśniłaby mi tą kwestię. Dlaczego document nie pojawia się na tego typu rysunkach przedstawiających hierarchię w okienku?
menus.gif

0

https://docs.oracle.com/javase/8/docs/api/javax/swing/text/Document.html
Na rysunku powyżej są (poza Object) elementy widoku, Document jest elementem modelu.

0

Pewnie minie jeszcze kilka dni zanim zrozumiem ogólną zasadę funkcjonowania tego wszystkiego, ale nikt nie mówił, że będzie łatwo :).
Tymczasem wczoraj po napisaniu tego kodu naszło mnie przemyślenie. Hmmm, a co jeśli chciałbym, żeby mój program zapisywał pogrubiony tekst do postaci <b>tekst</b> w pliku .txt. I tu narodził się dość spory problem, ponieważ pogrubiony tekst do JTextPane łatwo można wprowadzić po pobraniu documentu i użyciu metody insertString(int offset, String str, AttributeSet a). Ale jak w takim razie sprawdzić, czy konkretny kawałek tekstu ma pogrubienie? Czy w ogóle jest to wykonalne zrobić to drogą, którą idę? Przeglądałem wczoraj dokumentację chyba do pierwszej w nocy i w kółko googlowałem, ale moje niedoświadczone oko nie wychwyciło nic co mogłoby zostać użyte do tego.

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