Montag, 19. Januar 2009
Fett und Durchgestrichen
Wie ändere ich die Schriftart einer JComponent dahingehend, dass sie fett und durchgestrichen wird?

Zum Beispiel mit dieser kleinen Methode:

private static void changeFontOfComponent(JComponent comp, boolean bold, boolean strikethrough) {
Map attributes = new Hashtable(2);
attributes.put(TextAttribute.WEIGHT, bold ? TextAttribute.WEIGHT_BOLD : TextAttribute.WEIGHT_REGULAR);
attributes.put(TextAttribute.STRIKETHROUGH, Boolean.valueOf(strikethrough));
comp.setFont(comp.getFont().deriveFont(attributes));
}

... link (0 Kommentare)   ... comment


Montag, 12. Januar 2009
Zeilen einer CSV-Datei splitten
Wie kann man eine Zeile einer CSV-Datei splitten? Ganz einfach, mit der String-Methode 'split'.

Nun das Problem: Die String-Werte sind in Anführungszeichen eingeschlossen und können auch das Trennzeichen als normalen Text enthalten. Die 'split'-Methode kann die vermeintlichen Trennzeichen in dem normalen Text nicht übersehen. Eine Lösung bietet meine CsvSplitter Klasse:

public class CsvSplitter
{
// public static void main(String[] args) {
// CsvSplitter sp = new CsvSplitter(';', '"');
// System.out.println(Arrays.toString(sp.split("a;b;cde;\"ha;ha; you never expected this\";test")));
// System.out.println(Arrays.toString(sp.split("a;b;cde;")));
// System.out.println(Arrays.toString(sp.split("ade")));
// System.out.println(Arrays.toString(sp.split("")));
// System.out.println(Arrays.toString(sp.split("\"as\"f\";")));
// }

public CsvSplitter(char delimiter, char quote) {
this.delimiter = delimiter;
this.quote = quote;
}

public String[] split(String s) {
if (s.length() == 0) {
return new String[] { "" };
}
text = s;
init();
int tokenCount = 0;
while (nextToken()) {
tokenCount++;
}
String result[] = new String[tokenCount];

init();
int i = 0;
while (nextToken()) {
result[i++] = s.substring(startIdx, endIdx);
}
return result;
}

private char delimiter;

private char quote;

private String text;

private int length;

private boolean quoteOpened;

private int startIdx;

private int endIdx;

private int textIdx;


private void init() {
length = text.length();
quoteOpened = false;
startIdx = 0;
endIdx = 0;
textIdx = 0;
}

/**
* calculates startIdx and endIdx of next token
*/
private boolean nextToken() {
if (textIdx > 0) {
if (textIdx == length && endIdx < length && text.charAt(endIdx) == delimiter) { // empty token
endIdx = startIdx;
return true;
}
else if (textIdx >= length) {
return false; // no more token
}
startIdx = endIdx + 1; // index of next token
}
boolean tokenFound = false;
while (!tokenFound) {
char ch = text.charAt(textIdx);
if (ch == quote) {
if (quoteOpened) {
if (textIdx + 2 < length) {
quoteOpened = text.charAt(textIdx + 1) != delimiter;
}
else {
quoteOpened = false;
}
}
else {
quoteOpened = true;
}
}
else if (!quoteOpened && ch == delimiter) {
endIdx = textIdx;
tokenFound = true;
}
else if (textIdx == length - 1) {
endIdx = textIdx + 1;
tokenFound = true;
}
textIdx++;
}
return true;
}
}

... link (0 Kommentare)   ... comment


Freitag, 12. September 2008
Aus Icon wird Image
Diese Methode macht aus einem javax.swing.Icon ein java.awt.Image Objekt:

public Image iconToImage(Icon icon) {
if (icon instanceof ImageIcon) {
return ((ImageIcon)icon).getImage();
}
else {
int w = icon.getIconWidth();
int h = icon.getIconHeight();
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gd = ge.getDefaultScreenDevice();
GraphicsConfiguration gc = gd.getDefaultConfiguration();
BufferedImage image = gc.createCompatibleImage(w, h);
Graphics2D g = image.createGraphics();
icon.paintIcon(null, g, 0, 0);
g.dispose();
return image;
}
}

... link (0 Kommentare)   ... comment


Donnerstag, 21. August 2008
JComponent in ein Image zeichnen
Wie zeichnet man eine JComponent in ein Image?

private static Image createImage(JComponent c) {
BufferedImage image = new BufferedImage(c.getWidth(), c.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = image.createGraphics();
c.paint(g2);
return image;
}

... link (0 Kommentare)   ... comment


Montag, 7. Juli 2008
Bean Properties kopieren
Wie kopiert man Bean Properties?

org.apache.commons.beanutils.BeanUtils.copyProperties(Object target, Object source);

... link (0 Kommentare)   ... comment


Donnerstag, 3. Juli 2008
Serial Version UID
Serialisierbare Java-Objekte (die java.io. Serializable implementieren) sollten sinnvollerweise ein Feld serialVersionUID haben. Generieren kann man die UID in der Kommandozeile:

serialver package.ClassName

serialver ist ein Programm aus dem Java-Bin-Ordner.
Das Kommando muss im Bin-Ordner des aktuellen Projekts ausgeführt werden, damit die Klasse gefunden wird.

... link (0 Kommentare)   ... comment


Montag, 9. Juni 2008
Logs doppelt?
Wie verhindert man, dass Log4j Einträge doppelt schreibt?

Wenn eine log4j.xml im Spiel ist, dann mit einem Attribut "additivity". Ansonsten halt über eine Property:

log4j.xml: <category name="xy" additivity="false">
log4j.properties: log4j.additivity.xy=false

... link (0 Kommentare)   ... comment


Freitag, 23. Mai 2008
Sichere Umlaute
Wenn Umlaute eingefügt werden kann ggf. das Compilieren fehlschlagen oder unter Umständen werden die Zeichen später als "Hieroglyphen" angezeigt. Wie kann man "sicher" Umlaute in Java-Quellcode einfügen?

Schreibt man die Umlaute als Unicode-Sequenz, kann nix passieren:

Ä : \u00c4
Ö : \u00d6
Ü : \u00dc
ä : \u00e4
ö : \u00f6
ü : \u00fc

Mit dem Programm native2ascii aus dem Java-bin-Verzeichnis kann man alle Sonderzeichen in einer Textdatei automatisch Unicode kodieren lassen:

%JAVA_HOME%/bin/native2ascii datei1 > datei2

... link (0 Kommentare)   ... comment