2012-03-19 8 views
9

में कंसोल जावा को विज़ुअलाइज़ करने के लिए मैंने स्विंग लाइब्रेरी का उपयोग करके जावा प्रोग्राम बनाया है। अब मैं अपने कंसोल आउटपुट को जेएफआरएएम या जेपीनल में रीडायरेक्ट करना चाहता हूं।JFrame/JPanel

+2

तो क्या वास्तव में आपकी समस्या है? –

+0

शायद उस सामग्री को दूसरे स्विंग घटक (जैसे 'JTextArea') में जोड़ दें? – Moonbeam

उत्तर

6

एक बार आपके पास JFrame या JPanel है, तो इसमें एक टेक्स्ट फ़ील्ड जोड़ें।

JTextArea एक अच्छी पसंद है, क्योंकि यह कई लाइनों है। एक बार जब यह जोड़ा जाता है, तो आप .append('text'); इसे करने के लिए लिखने की बजाय कर सकते हैं System.out.print();

JFrame jFrame = new JFrame(); 

JTextArea jTextArea = new JTextArea(); 
jTextArea.append("Hello World."); 

jFrame.add(jTextArea); 
+0

ठीक है, मैंने इसके बारे में पढ़ा है। मैंने सोचा कि ऐसा करने के लिए कुछ और था। क्योंकि पहले से ही println हैं मैं एक नया textarea जोड़ने और उन्हें जोड़ने के लिए नहीं चाहता था – Gianfra

16

आप एक OutputStream कि फिर से निर्देशन पाठ क्षेत्र के लिए उत्पादन और कहा कि OutputStream इंटरफेस के लिए सभी आवश्यक तरीकों को लागू करता है बनाने की जरूरत है, और फिर अपने मुख्य कार्यक्रम में, अपने मानक आउटपुट को इस स्ट्रीम में रीडायरेक्ट करें। मैं अपने कार्यक्रमों में से एक के लिए कुछ इस तरह उपयोग किया है:

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); 
    } 
} 

और आप इस के साथ यह प्रदर्शित कर सकते हैं:

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(); 
     } 
     }); 
    } 
} 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^