Toon posts:

[JAVA] attributen voor een string

Pagina: 1
Acties:
  • 258 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hallo allemaal,

ik heb een string in java. dit zijn best lange strings. Ik wil van een string vanaf de tiende teken de font color op wit zetten.

ik heb gekeken op:
http://javaalmanac.com/egs/java.text/AddAttr.html

hier staat dat je het zo kan doen. als ik de code gebruik wordt er een error gegeven dat de package niet bestaat.

op sun.com heb ik gekeken op:
http://java.sun.com/j2se/...erIterator.Attribute.html

hier staat dat je de COLOR niet bij een AttributedCharacterIterator.Attribute kan gebruiken. Weten jullie raad?

is er een andere methode die jullie weten. Ik heb gezocht maar de enige die ik kan vinden was dit.

thnx

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21:42

Janoz

Moderator Devschuur®

!litemod

Een string is gewoon een verzameling tekens achter elkaar. Binnen het string object is geen enkele vorm van vormgeving gedefinieerd. Die komt pas om de hoek kijken wanneer je het af gaat drukken op iets dat vormgeving wel ondersteund. Een label heeft bijvoorbeeld wel atributen voor kleur en font.

In het door jou aangehaalde voorbeeld wordt een apparte class gebruikt die als wrapper om de string heen zit. Deze wrapper regelt het kleuren.

Wat wil je eigenlijk bereiken?

[ Voor 4% gewijzigd door Janoz op 21-10-2005 13:17 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • KopjeThee
  • Registratie: Maart 2005
  • Niet online
Heb je gezien dat het pas vanaf versie 1.2 kan? Heb je de juiste import wel gedaan? import java.text.*
Edit: Janoz heeft gelijk. Had ik niet eens naar gekeken.

Alternatief is om de string op te delen in stukjes met dezelfde kleur:
Dus in paint(Graphics g)

String b = "blauw";
String r = "rood";

g.setColor(Color.blue);
g.drawString(b, 0, 0);
int size = g.getFontMetrics().stringWidth(b);
g.setColor(Color.red);
g.drawString(r, size, 0);

[ Voor 11% gewijzigd door KopjeThee op 21-10-2005 13:23 ]


Verwijderd

Topicstarter
Janoz schreef op vrijdag 21 oktober 2005 @ 13:15:
Een string is gewoon een verzameling tekens achter elkaar. Binnen het string object is geen enkele vorm van vormgeving gedefinieerd. Die komt pas om de hoek kijken wanneer je het af gaat drukken op iets dat vormgeving wel ondersteund. Een label heeft bijvoorbeeld wel atributen voor kleur en font.

In het door jou aangehaalde voorbeeld wordt een apparte class gebruikt die als wrapper om de string heen zit. Deze wrapper regelt het kleuren.

Wat wil je eigenlijk bereiken?
ik heb alle nodige packages geimporteerd. en het moet werken. we willen niet dat de tekens na de tiende worden weergegeven. hoe kan ik deze aparte class gebruiken? is het ergens te downloaden?

[ Voor 5% gewijzigd door Verwijderd op 21-10-2005 13:32 ]


  • KopjeThee
  • Registratie: Maart 2005
  • Niet online
Ze moeten niet worden weergegeven??? Dan maak je toch een nieuwe string waar alleen de eerste 10 characters van de oude string in zitten? En dan druk je die af?

String langeString = "blablablbalbalbalbalbalbalbalabal";
String eerste10 = langeString.substring(0,9);

Verwijderd

Topicstarter
hoi,

bedankt voor jullie antwoorden. als ik substring gebruik, dan kan ik niet meer de waarde gebruiken die ik wit wil hebben.

ik ben nu al 2 dagen aan het zoeken, volgens mij bestaat er geen methode om dit te doen.

  • KopjeThee
  • Registratie: Maart 2005
  • Niet online
Sorry, ik begrijp het nu echt niet meer. Doe nog eens een poging om uit te leggen wat er precies moet gebeuren? Er bestaat vast wel een manier om te doen wat je wilt.

Verwijderd

Topicstarter
Ik heb een String. Hiervan wil ik vanaf de tiende teken alles in witte kleur weergeven. Dus echt een kleur en ik wil geen substring gebruiken.

  • dlmh
  • Registratie: Januari 2000
  • Laatst online: 27-04 09:25

dlmh

Lo-Fi

Zoals eerder gezegd bevat een String geen enkele informatie over de weergave van de inhoud.

Als je met verschillende kleuren wilt werken moet je gewoon delen van de String uitlezen dmv bijv.
code:
1
string.substring( offset, endindex );

en dan door
code:
1
g.setColor( Color.XXXX );
de kleur veranderen voor weergave.

Bijvoorbeeld:
code:
1
2
3
4
5
6
7
8
9
10
public void paint( Graphics g )
{
   String string = "eerstetienvolgende10";
   String eersteTien = string.substring( 0, 9 );
   String laatsteTien = string.substring( 10 );
   g.setColor( Color.RED );
   g.drawString( eersteTien, 10, 10 );
   g.setColor( Color.BLUE );
   g.drawString( laatsteTien, 10, 20 );
}

Ik weet niet precies meer hoe het zit met de parameters van drawString() en substring(), maar zoiets zou het wel moeten zijn.

Als dit niet is wat je bedoelt, moet je toch echt een stuk duidelijker zijn!!! :/

[ Voor 3% gewijzigd door dlmh op 21-10-2005 14:52 . Reden: typo's ]

“If a cluttered desk is a sign of a cluttered mind, of what, then, is an empty desk a sign?” - Albert Einstein


Verwijderd

Verwijderd schreef op vrijdag 21 oktober 2005 @ 14:31:
Ik heb een String. Hiervan wil ik vanaf de tiende teken alles in witte kleur weergeven. Dus echt een kleur en ik wil geen substring gebruiken.
Je wilt WEL substring gebruiken want je begrijpt geloof ik niet dat je het origineel ook kunt bewaren.

  • KopjeThee
  • Registratie: Maart 2005
  • Niet online
Verwijderd schreef op vrijdag 21 oktober 2005 @ 14:31:
Ik heb een String. Hiervan wil ik vanaf de tiende teken alles in witte kleur weergeven. Dus echt een kleur en ik wil geen substring gebruiken.
Laatste poging: Een combinatie van mijn eerdere 2 opmerkingen.

String langeString = "blablablblablalbalbalabalabalabalablab";
String begin = langeString.substring(0,9);
String eind = langeString.substring(10);

g.drawString(begin, 0, 0);
g.setColor(Color.white);
int beginBreedte = g.getFontMetrics().stringWidth(begin);
g.drawString(eind, beginBreedte, 0);

Dit tekent het begin en eind precies achter elkaar, waarbij het eind deel wit is.

[ Voor 8% gewijzigd door KopjeThee op 21-10-2005 14:53 ]


Verwijderd

Misschien ten overvloede, maar als je substr gebruikt, blijft het origineel gewoon bewaard. Je KUNT geen informatie aan een string meegeven over de kleur, je moet dus substr gebruiken.

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 23-04 02:19
Dit kan je echt nooit willen.

Wat als de achtergrond van waar je die DecoratedString gaat printen níét wit is?
Verwijderd schreef op vrijdag 21 oktober 2005 @ 15:11:
Misschien ten overvloede, maar als je substr gebruikt, blijft het origineel gewoon bewaard. Je KUNT geen informatie aan een string meegeven over de kleur, je moet dus substr gebruiken.
Dat is dus al gezegd, en je kunt wél informatie meegeven aan de AttributedString die in java.text zit. Het topic lezen is ook een kunst.

[ Voor 66% gewijzigd door Soultaker op 21-10-2005 15:25 ]


Verwijderd

Oke, ik heb daar geen ervaring mee. Mijn 1e regel klopt iig wel :)

  • KopjeThee
  • Registratie: Maart 2005
  • Niet online
Soultaker schreef op vrijdag 21 oktober 2005 @ 15:23:
Dit kan je echt nooit willen.

Wat als de achtergrond van waar je die DecoratedString gaat printen níét wit is?
Ik neem juist aan dat de achtergrond niet wit is, waarom zou je het anders wit willen printen (dan zie je het niet)???

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21:42

Janoz

Moderator Devschuur®

!litemod

Och, alleen je conclusie "je moet dus substr gebruiken" klopt niet. Want aan enkel een String kun je inderdaad geen kleur geven ;)...

Wat ik de TS wil vragen is dat hij eens gaat vertellen wat hij wil doen. En dan bedoel ik niet "De string wit maken", maar de onderliggende oorzaak/gewenste functionaliteit.

Ben je bezig een applicatie, applet of servlet te maken? Scheidt je ubethaupt je buisness logic een beetje van de GUI. Waarin wil je die tekst nu laten verschijnen en waarom heb je het orgineel ook nog steeds nodig?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • KopjeThee
  • Registratie: Maart 2005
  • Niet online
Janoz heeft gelijk, dus meer info. Maar als je per se AttributedString ipv String wilt gebruiken... Ik heb hier geen ervaring mee, maar...

paint(Grapchics g)
{

AttributedString lang = "blablablbalbalbalbalbalbal";
lang.addAttribute(TextAttribute.FOREGROUND, Color.white, 10, lang.getLength());
g.drawString(lang.getIterator(), 0, 0);

}

Je kunt wel eigen attributen definieeren, zoals COLOR, maar dan zal drawString ze niet kennen. Deze code heb ik niet geprobeerd hoor, dus misschien zit ik er helemaal naast.

[ Voor 12% gewijzigd door KopjeThee op 21-10-2005 16:01 ]

Pagina: 1