Konsolentabelle darstellen

Status
Nicht offen für weitere Antworten.

Jay1980

Bekanntes Mitglied
Servus,

ich habe eine Tabelle in der Konsole, diese lass ich mir über System.out.println(outputString) anzeigen. Nun will ich diese Tabelle auch in Swing so sehen können.

Ich habe schon etwas mit einem JTable rumprobiert, das ist mir aber zu kompliziert und zu aufwändig, eigentlich will ich ja nur meinen String ausgeben. Da wiederum ist aber das Problem mit einem Zeilenumbruch, JLabel macht das ja nicht und dazu kommt noch, dass ich die Größe der Matrix vorher nicht weiss, mal gibt der Nutzer die Strings 'frieda' und 'fritz' ein, mal zwei sehr lange. Da kommt es dann ja zu Problemen, weil ich eine fixe Größe des Elternpanels habe.

Ein vielversprechender Versuch war für mich, alles in einem JOptionPane zu packen, der Message-Dialog geht ja als eigenes Fenster auf und Zeilenumbrüche versteht der Dialog auch, das einzige was noch etwas zwickt ist hier, dass die Leerzeichen und die Schrift in meiner Eclipse-Konsole und in meiner Swing-Anwendung unterschiedlich sind, da stehen meine 'Zellen' also nicht mehr übereinander.

Wie würdet ihr es machen, dass ich die Zeichen-Tabelle in der Konsole sehen kann und diese dem Nutzer meiner Swing-Anwendung ebenfalls verfügbar machen kann?

Danke vorab.

Code:
// ---------------------------------------------
		// 
		//         || - | f ; r ; i ; t ; z ; |      // Array columnsNames [0] ist f von fritz
		//	   || f | 1 ; 0 ; 0 ; 0 ; 0 ; |      // 2D-Array dataRows						     
		// 	   || r | 0 ; 1 ; 0 ; 0 ; 0 ; |      // 	dataRows[0] = Array { 1, 0, 0, 0, 0 }; 
		// 	   || i | 0 ; 0 ; 1 ; 0 ; 0 ; |      // 	dataRows[1] = Array { 0, 1, 0, 0, 0 };
		// 	   || e |				  //     dataRows[2][3] = 1;
		//	   || d |							 
		// 	   || a |							 
		//
		//            ^ Array firstDataRow [0] = f von frieda
 

Ebenius

Top Contributor
Ich würde so was versuchen:
Java:
public static void main(String[] args) {
  final JTextArea textArea = new JTextArea(20, 76);
  textArea.setEditable(false);

  final int fontSize = textArea.getFont().getSize();
  textArea.setFont(new Font(Font.MONOSPACED, Font.PLAIN, fontSize));
  textArea
        .setText("// ---------------------------------------------\n"
              + "// \n"
              + "//         || - | f ; r ; i ; t ; z ; |      // Array columnsNames [0] ist f von fritz\n"
              + "//         || f | 1 ; 0 ; 0 ; 0 ; 0 ; |      // 2D-Array dataRows\n"
              + "//         || r | 0 ; 1 ; 0 ; 0 ; 0 ; |      //         dataRows[0] = Array { 1, 0, 0, 0, 0 }; \n"
              + "//         || i | 0 ; 0 ; 1 ; 0 ; 0 ; |      //         dataRows[1] = Array { 0, 1, 0, 0, 0 };\n"
              + "//         || e |                                 //     dataRows[2][3] = 1;\n"
              + "//         || d |                                                        \n"
              + "//         || a |                                                        \n"
              + "//\n"
              + "//            ^ Array firstDataRow [0] = f von frieda");
  final JPanel contentPane = new JPanel(new BorderLayout(6, 6));
  contentPane.add(new JScrollPane(textArea));

  final JFrame f = new JFrame("Test Frame: PseudoConsoleOutput");
  f.setContentPane(contentPane);
  f.pack();
  f.setLocationRelativeTo(null);
  f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  f.setVisible(true);
}
Vielleicht hilft's.

Ebenius
 

Jay1980

Bekanntes Mitglied
Sorry,

es soll nur die Tabelle rein, nicht die Kommentarzeichen und Tabulatorsprünge. Aber egal, ich habe eine andere Idee, die TextArea-Geschichte probiere ich aus.

Folgendes: kennt einer von euch eine Anwendung, die OpenSource ist, auf Swing basiert und die Konsolenausgaben in einem Fenster darstellt - da könnte ich dann ja schauen, wie die das gemacht haben?! Eclipse nutzt ja kein Swing, aber ggf. kennt ja einer etwas in der Richtung, die müssen das ja auch irgendwie gemacht haben, und so hol ich dann ja direkt die Konsole ins SwingPanel - oder hab ich da irgendwo einen Denkfehler.
 

fjord

Bekanntes Mitglied
Willst du sowas in der Art?
Java:
import javax.swing.*;
import java.io.*;

public class KonsoleFrame {
	private JTextArea area;
	
	public KonsoleFrame() {
		JFrame frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		area = new JTextArea(15, 50);
		area.setEditable(false);
		frame.add(area);
		frame.pack();
		frame.setVisible(true);
		System.setOut(new PrintStream(new OutputFilter(System.out)));		
	}	

	public static void main(String[] args) {
		new KonsoleFrame();
		System.out.println("test");
	}
	
	class OutputFilter extends FilterOutputStream {
		public OutputFilter(OutputStream out) {
			super(out);
		}
		
		@Override
		public void write(byte b[]) throws IOException {
			out.write(b); // schreibt in die Konsole
			final String temp = new String(b);
			SwingUtilities.invokeLater(new Runnable(){
				@Override
				public void run() {
					area.append(temp);					
				}				
			});            
        }
		
		@Override
        public void write(byte b[], int off, int len) throws IOException {
			out.write(b, off, len); // schreibt in die Konsole
            final String temp = new String(b , off , len);
            SwingUtilities.invokeLater(new Runnable(){
				@Override
				public void run() {
					area.append(temp);					
				}				
			});
        }		
	}	
}
 

Jay1980

Bekanntes Mitglied
Ah, okay man findet ja schon einige Lösungen für 'console java swing', aber die Variante mit der JTextArea ist wohl in meinem Fall am besten. Eigentlich muss ich es nur noch schaffen, eine Monospace-Schrift zu erhalten. Ich habe schon gelesen und kann mir nicht erklären, was ich da falsch gemacht habe - mit den Schriften hatte ich mit meinem Ubuntu schon oftmals eine Extraschicht einlegen müssen, bis alles so lief wie ich wollte.

Hier ist der Code - sieht jemand einen Fehler?

Java:
// put Panel together
		JPanel jobaDotplotPanel = new JPanel();
		
		// JTextArea mit ScrollPane
		JTextArea textArea = new JTextArea( dialogString, 10, 10 );
		textArea.setEditable(false);
		textArea.setLineWrap(true);
		textArea.setWrapStyleWord(true);
		
		JScrollPane scrollPane = new JScrollPane( textArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
		Dimension dim = new Dimension( 600, 600);
		scrollPane.setPreferredSize(dim);
		scrollPane.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 16));
		
		// einhängen ins Panel
		jobaDotplotPanel.add(scrollPane);
		
		// save Panel in attribute
		this.jobaDotplotPanel = jobaDotplotPanel;
 

Ebenius

Top Contributor
Aus welchem Grund setzt Du der JScrollPane den Font? Der muss natürlich auf die JTextArea.

Ebenius
 

Jay1980

Bekanntes Mitglied
Danke Ebinius, das war der Fehler, dass sich da nichts getan hat.

Leider immer noch keine Lösung, auch durch die Angabe von Font.Monospaced erhalte ich keine richtige Monospace-Schrift. Das i hat nicht den gleichen Platz wie das Z daher ist meine Tabelle ultraverrutscht.

Mir ist das eh nicht ganz klar, als ersten Parameter eines Font-Konstruktors kann ich ja einen String mit dem Font-Namen mitgeben oder aber auch so Konstanten wie Font.MONOSPACED, dann aber wieder keinen Font-Namen. Nehmt ihr dann lieber direkt eine nichtproportionale Schrift, etwa Courier - die ist ja dann von Haus aus Monospaced. Wie macht man es dann wenn etwa Courier nicht auf dem System des Anwenders installiert ist?
 

Jay1980

Bekanntes Mitglied
Sodala,

jetzt ist das Problem gelöst. Der Schlüssel war zu überprüfen welche Schriften denn auf meinem System überhaupt installiert sind - das geht mit einer statischen Methode. Dann stellte ich fest, dass 'Monospaced' zwar installiert ist, aber dass es damit nicht klappte, das i war viel schmaler als das Z. Nun habe ich eine Schrift genommen die bei meinem System (Ubuntu Linux) mit dabei war, Nimbus Sans Mono L oder so ähnlich und dann war die Anzeige wirklich nichtproportional. Tabelle steht nun also.

Die Methode zum Auslesen der Schriften auf dem eigenen System ist diese hier:

Java:
for ( String fonts : GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames() )
		{
			System.out.println(fonts);
		}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Hintergrundbild im Fenster darstellen AWT, Swing, JavaFX & SWT 9
H JTable im JSplitPane darstellen AWT, Swing, JavaFX & SWT 2
B Text im Tetfeld in einer TableView darstellen AWT, Swing, JavaFX & SWT 20
ralfb1105 JavaFX Exception Message von Model Class via Controller in View darstellen AWT, Swing, JavaFX & SWT 39
olfibits Swing JavaFX-Frame in JDesktopPane darstellen? AWT, Swing, JavaFX & SWT 2
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
L Swing JTable im Panel darstellen AWT, Swing, JavaFX & SWT 8
Y Objekte grafisch darstellen ohne GMF - Composite auf Canvas? AWT, Swing, JavaFX & SWT 2
G Ampel graphisch darstellen AWT, Swing, JavaFX & SWT 2
T JComponents zur Laufzeit auf JPanel darstellen AWT, Swing, JavaFX & SWT 10
Augenblau JavaFX Wechselnde Werte in Label darstellen AWT, Swing, JavaFX & SWT 7
H Karte mit JXMapKit darstellen AWT, Swing, JavaFX & SWT 0
C (JavaFX 8) SQLite Datenbank in einem TableView darstellen AWT, Swing, JavaFX & SWT 2
M Jtable besser darstellen AWT, Swing, JavaFX & SWT 6
Q Swing Fenster updaten - Hinzugefügte Komponenten darstellen AWT, Swing, JavaFX & SWT 3
J Mehrere Hyperlinks "stilvoll" darstellen. AWT, Swing, JavaFX & SWT 1
C Ventilator Geschwindigkeit darstellen AWT, Swing, JavaFX & SWT 1
A 3D-Grafik 3D Gitter Darstellen AWT, Swing, JavaFX & SWT 1
T Swing Aktuelle Größe eines Textes in einem Label darstellen AWT, Swing, JavaFX & SWT 3
T Kreis in Jlabel darstellen. AWT, Swing, JavaFX & SWT 13
T Swing Elemente der JList überlappend darstellen AWT, Swing, JavaFX & SWT 5
H Swing Arbeitsspeicherauslastung anderer Programme grafisch darstellen AWT, Swing, JavaFX & SWT 16
J jTable anders darstellen AWT, Swing, JavaFX & SWT 4
Iron Monkey Nach Drag & Drop die Datei auf Komponent darstellen AWT, Swing, JavaFX & SWT 2
M Array grafisch darstellen AWT, Swing, JavaFX & SWT 9
D JOptionPane.QUESTION_MESSAGE Fett darstellen AWT, Swing, JavaFX & SWT 4
B Signal als Diagramm darstellen AWT, Swing, JavaFX & SWT 6
D Swing Bresenham Linienalgorithmus grafisch darstellen AWT, Swing, JavaFX & SWT 6
B 3D-Grafik Punkt in JAVA3D darstellen AWT, Swing, JavaFX & SWT 2
M In JField eine Kommazahl darstellen java.lang.NumberFormatException AWT, Swing, JavaFX & SWT 4
M Swing XML Datei in JTable darstellen + verändern AWT, Swing, JavaFX & SWT 3
X Icons in einer Spalte darstellen AWT, Swing, JavaFX & SWT 6
C Text in einer Seitenansicht darstellen AWT, Swing, JavaFX & SWT 3
M 2x JComponent in einem JFrame darstellen? AWT, Swing, JavaFX & SWT 7
Y Word Dokument im JPanel darstellen AWT, Swing, JavaFX & SWT 5
T Zeichen/char in Bild umwandeln und darstellen AWT, Swing, JavaFX & SWT 10
Zettelkasten Swing anklickbaren Link darstellen AWT, Swing, JavaFX & SWT 2
D Texte zeichenweise übereinander darstellen, gemeinsam umbrechen AWT, Swing, JavaFX & SWT 5
L Rollkurven (zykloide) darstellen AWT, Swing, JavaFX & SWT 13
D Zwei String Attribute über eine Methode als Zeilen in einer Tabelle darstellen AWT, Swing, JavaFX & SWT 9
J 3D-Grafik JOGL - Verschiedene Perspektiven darstellen AWT, Swing, JavaFX & SWT 5
destroflyer Swing UTF-8 in JEditorPane darstellen AWT, Swing, JavaFX & SWT 5
A SWT: Daten in Raster mit Gitternetzlinien darstellen AWT, Swing, JavaFX & SWT 7
C JTable: Mehrere Farben in einer Zelle darstellen AWT, Swing, JavaFX & SWT 10
X Swing JList -> Daten anders darstellen als im Model hinterlegt -> möglich ? AWT, Swing, JavaFX & SWT 9
S Animation korrekt darstellen AWT, Swing, JavaFX & SWT 8
M Swing Prozentwerte grafisch darstellen - wie? AWT, Swing, JavaFX & SWT 4
T JFrame als JInternalFrame darstellen AWT, Swing, JavaFX & SWT 2
R Wie in GUI System.out's darstellen AWT, Swing, JavaFX & SWT 8
prakdi grafisches Darstellen von einer Parabel?![JAVA] AWT, Swing, JavaFX & SWT 2
M Bilder in einem Textfeld darstellen AWT, Swing, JavaFX & SWT 2
C Swing JComboBox - Problem bei Darstellen von ImageIcon AWT, Swing, JavaFX & SWT 4
M Java-Quellcode im Paanel mit Syntax-highlightning darstellen? AWT, Swing, JavaFX & SWT 2
T Choice "gezielt" darstellen aber wie - mit Koordinaten aber wie? AWT, Swing, JavaFX & SWT 6
F Einfaches Fenster "ordentlich" darstellen AWT, Swing, JavaFX & SWT 8
F "Objekte" mit "Verbindungen" grafisch darstellen AWT, Swing, JavaFX & SWT 4
S Swing JTable: in erster Spalte Image darstellen AWT, Swing, JavaFX & SWT 30
Antoras Swing Umfangreiche formatierte Texte in Fenster darstellen AWT, Swing, JavaFX & SWT 2
R MousePosition über mehrere JPanels darstellen AWT, Swing, JavaFX & SWT 13
M Darstellen eines Bildes AWT, Swing, JavaFX & SWT 3
D java.lang.IllegalArgumentException beim Darstellen eines Panels AWT, Swing, JavaFX & SWT 7
S Datum in Tabelle darstellen? AWT, Swing, JavaFX & SWT 4
R JTable: Tabelle neu darstellen AWT, Swing, JavaFX & SWT 6
R JTable darstellen von leeren Zellen AWT, Swing, JavaFX & SWT 12
R JTable Darstellen der selektierten Zelle braucht lange AWT, Swing, JavaFX & SWT 7
S Mathematische Förmeln darstellen AWT, Swing, JavaFX & SWT 5
J JComboBox geöffnet darstellen AWT, Swing, JavaFX & SWT 5
R Daten in JTable in mehreren Zeilen darstellen AWT, Swing, JavaFX & SWT 11
1 Laden einer Datei zur Echtzeit Darstellen AWT, Swing, JavaFX & SWT 7
P HTML darstellen mit Java AWT, Swing, JavaFX & SWT 4
G Icon und Text in JTable darstellen AWT, Swing, JavaFX & SWT 3
F Ein JLayerdPane in einem JScrollPane darstellen AWT, Swing, JavaFX & SWT 2
SebSnake Animiertes GIF auf JPG Hintergrund darstellen? AWT, Swing, JavaFX & SWT 3
J .ps Bilder in JavaApplication darstellen AWT, Swing, JavaFX & SWT 4
J Titel im aktive JTabbedPane tab fett darstellen AWT, Swing, JavaFX & SWT 4
O DB-Zugriff + wie darstellen? AWT, Swing, JavaFX & SWT 6
P JScrollPane ohne Komponente in definierter Größe darstellen AWT, Swing, JavaFX & SWT 6
W Selbes Steuerelement auf 2 Fenster darstellen und zeichnen AWT, Swing, JavaFX & SWT 3
K JComboBox in DefaultTableModel darstellen AWT, Swing, JavaFX & SWT 2
T Bilder von Webcam darstellen AWT, Swing, JavaFX & SWT 3
M Windows-Fensterinhalt in Java-Applikation darstellen AWT, Swing, JavaFX & SWT 6
M Applet in JFrame darstellen AWT, Swing, JavaFX & SWT 2
Firefork JPopupMenu unter einem Schalter darstellen AWT, Swing, JavaFX & SWT 2
M JTable text zentriert darstellen AWT, Swing, JavaFX & SWT 5
G TableCellRenderer Background variiert darstellen AWT, Swing, JavaFX & SWT 3
S Text farbig darstellen AWT, Swing, JavaFX & SWT 3
F Frame in Frame darstellen AWT, Swing, JavaFX & SWT 2
S JComponent in JPanel darstellen AWT, Swing, JavaFX & SWT 2
B JFrame Transparent darstellen AWT, Swing, JavaFX & SWT 4
S JDialog durchsichtig darstellen ? AWT, Swing, JavaFX & SWT 2
F kleine Zahlen/buchstaben mit Java darstellen? AWT, Swing, JavaFX & SWT 3
J Große Anzahl von Comboboxen in Tabelle darstellen AWT, Swing, JavaFX & SWT 2
B Vectorinhalt in Tabellenzelle darstellen AWT, Swing, JavaFX & SWT 3
G Knoten im Jtree mit unterscheidlichen Farben darstellen AWT, Swing, JavaFX & SWT 5
$ JTree in JTable darstellen und selectieren AWT, Swing, JavaFX & SWT 13
T Festen Text mit Absätzen darstellen AWT, Swing, JavaFX & SWT 3
D Mit JOptionPane einen Link darstellen AWT, Swing, JavaFX & SWT 10
C Dasselbe JLabel mehrmals darstellen AWT, Swing, JavaFX & SWT 11
M Datenbericht aus Datenbank darstellen.(einfaches Konzept) AWT, Swing, JavaFX & SWT 2
S JTree in einem JTree darstellen AWT, Swing, JavaFX & SWT 9

Ähnliche Java Themen

Neue Themen


Oben