Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich habe ein kleines Programm, welches eine Menge an Zahlen berechnet, die in mehreren Tabellen ausgegeben werden sollen.
Da die Zahlen unterschiedlich lang sind, würde ich diese gerne in einem einheitlichen Tabellen-Layout ausgeben, bei der dann jede Zelle eine feste größe hat und sich somit nicht alles verschiebt.
Kann man sowas irgendwie realisieren (z.B. in einem StyledText-Feld) ?
Du willst Zahlen in einem Tabellen-Layout anlegen?
Ich nehme an du redest davon, dass du eine Komponente suchst die es dir ermöglicht deine Daten in einer Art Tabellenstil anzuzeigen...
Da gibt es von Swing doch zum einen die JTable oder auch eine JEdtiorPane/JTextPane bei der du mit ein wenig HTML und einem Tabellengrundgerüst jeder Zelle nur noch deinen Inhalt, also deine berechneten Zahlen mit geben kannst.
Du könntest dir auch einfach ein JPanel mit einem GridLayout anlegen, deine Werte jeweils in ein JLabel schreiben und dieses JLabel als Komponente dem JPanel mit dem Gridlayout übergeben. Dabei wären dank des GridLayouts alle deine Zellen gleich groß...
Muss es unbedingt eine Text-Komponente sein? Wenn du deine Ergebnisse in HTML verpacken könntest, könntest du dieses einfach über eine Browser-Komponente anzeigen lassen und brauchst dich nicht selbst darum zu kümmern, irgendwo Tabellen einzusetzen.
Das ganze ist eine Windows-Anwendung, also mit html sollte das nicht funktionieren, oder?
Hm, also ein Grid-layout erzeugen und dieses dann in ein Textfeld ausgeben (schön formatiert) funktioniert nicht?
Also ich denke auch, dass du, wie Gastredner schon sagte, das Browser Widget ausprobieren solltest.
Es mag ja sein das es mit einem StyledText auch möglich wäre so etwas zu "bauen", aber ich denke die Zeit könnte man sich sparen...
Schau die mal folgendes Beispiel mit einem Browser Widget an:
Java:
import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class BrowserWithTable {
public static void main(String [] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
Browser browser = new Browser(shell, SWT.NONE);
browser.setUrl("table.html");
shell.setSize(350, 550);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
Du brauchst natürlich dann noch ne table.html...
Dazu einfach ein Textdokument öffnen mit folgendem Inhalt:
HTML:
<head>
</head>
<body>
<table border = 1px>
<tr><td>1. Zelle in 1. Zeile </td></tr>
<tr>
<td>1. Zelle in 2. Zeile </td>
<td>2. Zelle in 2. Zeile </td>
</tr>
<tr>
<td>1. Zelle in 3. Zeile </td>
<td>2. Zelle in 3. Zeile </td>
<td>3. Zelle in 3. Zeile </td>
</tr>
<tr>
<td>1. Zelle in 4. Zeile </td>
<td>2. Zelle in 4. Zeile </td>
<td>3. Zelle in 4. Zeile </td>
<td>4. Zelle in 4. Zeile </td>
</tr>
</table>
</body>
</html>
und diese Datei als table.html speichern.
Vergiss nicht deine Pfadangabe dementsprechend anzupassen für die Methode
[JAVA=14]browser.setUrl("table.html");
[/code]
Obiges Beispiel kannst du dir ja schon mal ein wenig anschauen...
Da du davon sprichst, dass ne Menge Zahlen in so eine Struktur rein müssten, müsstest du dir wohl oder übel einen Textparser bauen, der dir dann die jeweilige HTML Tabellen Struktur zusammen baut, denn je nachdem wie viele Zellen du brauchst musst du natürlich auch dein Tabellengerüst anpassen...
Ok, also erstelle ich mir quasi per FileWriter eine html-datei, die ich dann dort anstatt des Textfeldes ausgebe, richtig?
kann ich die td's eigentlich auch mit einem "style" versehen?
Ich habe dort zudem eine pdf-export-funktion eingebaut, wird diese (itext) weiterhin funktionieren (denn nun ist die ausgabe ja html und nicht mehr der output des textfeldes.
Also das Grundgerüst für das HTML File wäre schon mal so...
Du musst nun noch beim Table-Tag eine Routine einbauen, damit du auch ein gewünschtes Ergebnis erzielen kannst.
Ich habe hier ein 2 Dim Array als Beispiel verwendet. Damit hast du also immer pro Zeile immer deine nötigen Zellen gesichert...
Ob du es so machen kannst weiss ich nicht. Probier dich ein wenig daran aus.
Java:
import java.io.FileWriter;
import java.io.IOException;
public class MyWriter {
int[][] valuesPerRow;
public MyWriter(){
try{
generateHTMLCode(valuesPerRow);
}catch(IOException e){
e.printStackTrace();
}
}
public static void main(String[] args) {
new MyWriter();
}
public void generateHTMLCode(int[][] valuesPerRow) throws IOException {
FileWriter wrt = new FileWriter("table.html");
wrt.write("<html>");
wrt.write(System.getProperty("line.separator"));
wrt.write("<head>");
wrt.write(System.getProperty("line.separator"));
wrt.write("</head>");
wrt.write(System.getProperty("line.separator"));
wrt.write("<body>");
wrt.write(System.getProperty("line.separator"));
wrt.write("\t");
wrt.write("<table>");
wrt.write(System.getProperty("line.separator"));
// Hier muss ne for Schleife rein die dir das Tabellenzeilen bzw. Zellengerüst generiert...
wrt.write("\t");
wrt.write("</table>");
wrt.write(System.getProperty("line.separator"));
wrt.write("</body>");
wrt.write(System.getProperty("line.separator"));
wrt.write("</html>");
wrt.flush();
if (wrt != null)
try {
wrt.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Übrigens: die td können auch einen Style haben.
Der Export des PDF´s könntest du doch auch innerhalb Mittels html lösen... Du kannst den Inhalt ja mit einem IFrame oder so im Html-Dokument platzieren.. Genau kann ich es dir hierbei nicht sagen. Aber da findet sich schon ne Lösung.