konsol java görselleştirmek nasıl Swing kütüphaneleri kullanarak bir Java programı yaptım. Şimdi konsol çıktılarımı bir JFrame veya JPanel'e yönlendirmek istiyorum.JFrame/JPanel
9
A
cevap
6
JFrame
veya JPanel
numaranızı aldıktan sonra, buna bir metin alanı ekleyin. Birden çok satır olduğu için, iyi bir seçimdir
. eklendiği sonra .append('text');
bunun yerine yazma can System.out.print();
JFrame jFrame = new JFrame();
JTextArea jTextArea = new JTextArea();
jTextArea.append("Hello World.");
jFrame.add(jTextArea);
+0
Tamam, bunu okudum. Bunu yapacak başka bir şey olduğunu düşündüm. Zaten println var çünkü yeni bir textarea eklemek istemedim ve ekledim – Gianfra
16
Metin alanına çıktı ve bu OutputStream arayüzünün gerekli tüm yöntemleri uygular-yönlendirir yeniden bir OutputStream yapmak gerekir
, ve sonra ana programınızda, Standart çıkışınızı bu akışa yönlendirin. Benim programlardan biri için böyle bir şey kullandım:
import java.io.IOException;
import java.io.OutputStream;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
public class TextAreaOutputStream extends OutputStream {
private final JTextArea textArea;
private final StringBuilder sb = new StringBuilder();
private String title;
public TextAreaOutputStream(final JTextArea textArea, String title) {
this.textArea = textArea;
this.title = title;
sb.append(title + "> ");
}
@Override
public void flush() {
}
@Override
public void close() {
}
@Override
public void write(int b) throws IOException {
if (b == '\r')
return;
if (b == '\n') {
final String text = sb.toString() + "\n";
SwingUtilities.invokeLater(new Runnable() {
public void run() {
textArea.append(text);
}
});
sb.setLength(0);
sb.append(title + "> ");
return;
}
sb.append((char) b);
}
}
Ve bu onu gösterebilir:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.PrintStream;
import javax.swing.*;
@SuppressWarnings("serial")
public class TextAreaOutputStreamTest extends JPanel {
private JTextArea textArea = new JTextArea(15, 30);
private TextAreaOutputStream taOutputStream = new TextAreaOutputStream(
textArea, "Test");
public TextAreaOutputStreamTest() {
setLayout(new BorderLayout());
add(new JScrollPane(textArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER));
System.setOut(new PrintStream(taOutputStream));
int timerDelay = 1000;
new Timer(timerDelay , new ActionListener() {
int count = 0;
@Override
public void actionPerformed(ActionEvent arg0) {
// though this outputs via System.out.println, it actually displays
// in the JTextArea:
System.out.println("Count is now: " + count + " seconds");
count++;
}
}).start();
}
private static void createAndShowGui() {
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new TextAreaOutputStreamTest());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
Yani tam olarak sorun nedir? –
Belki tüm bu içeriği başka bir Swing bileşenine (ör. JTextArea') ekleyebilirsiniz? – Moonbeam