2014-09-18 32 views

回答

3

有根據你的數據是如何得出的爲您提供了一些可能的解決方案......

最基本的就是要確保你使用的是固定寬度的字體...

enter image description here

import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class OutputTest { 

    public static void main(String[] args) { 
     new OutputTest(); 
    } 

    public OutputTest() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     public TestPane() { 
      String[] lines = { 
       "Idx  Met  MTU  State    Name   ", 
       "--- --------- ---------- ------------ --------------------------", 
       " 1   50 4294967295 connected  Loopback Psudo-Interface 1", 
       " 11   10  1500 connected  Local Area Connection  ", 
       " 11   5  1500 disconnected Local Area Connection 3 ", 
      }; 

      setLayout(new BorderLayout()); 
      JTextArea ta = new JTextArea(10, 40); 
      ta.setFont(new Font("Monospaced", Font.PLAIN, 13)); 
      for (String text : lines) { 
       ta.append(text + "\n"); 
      } 
      add(new JScrollPane(ta)); 
     } 

    } 

} 

這是偉大的,如果從另一個源(比如外部的管道內容命令)。

如果您擁有對內容的控制權,您可以使用String.format,但除非您使用的是固定寬度的字體,否則它們沒有任何區別,您仍然會遇到格式問題。

另一種解決方案將是使用一個HTML表在JEditorPane,然後字體不要緊

另一種解決方案可以是使用一個JTable,其被設計以表格形式來呈現數據。有關詳細信息,

更新

這是一個與汽車中的錯誤的Netbeans 8.0生成的代碼我敢肯定見How to Use Tables。它只是很難追查這個問題。

我懷疑很高,這是一個錯誤,因爲這是使用了由數百名,每天如果沒有成千上萬的人......但沒有一個runnable example這表明你的問題,這是不可能知道肯定...

ta.setFont(new Font(「Monospaced」,Font.PLAIN,13));但是,如果您切換爲粗體或斜體或粗體斜體,則會生成該線並正常工作。

我不敢苟同......

Fixed Width Font

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.Font; 
import java.awt.GridLayout; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class TestTable { 

    public static void main(String[] args) { 
     new TestTable(); 
    } 

    public TestTable() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     public TestPane() { 
      setLayout(new GridLayout(4, -1)); 
      String[] lines = { 
       "Idx  Met  MTU  State    Name   ", 
       "--- --------- ---------- ------------ --------------------------", 
       " 1   50 4294967295 connected  Loopback Psudo-Interface 1", 
       " 11   10  1500 connected  Local Area Connection  ", 
       " 11   5  1500 disconnected Local Area Connection 3 ",}; 

      Font baseFont = new Font("Monospaced", Font.PLAIN, 13); 
      addTextArea(baseFont, lines); 
      addTextArea(baseFont.deriveFont(Font.ITALIC), lines); 
      addTextArea(baseFont.deriveFont(Font.BOLD), lines); 
      addTextArea(baseFont.deriveFont(Font.BOLD | Font.ITALIC), lines); 
     } 

     protected void addTextArea(Font font, String... lines) { 

      JTextArea ta = new JTextArea(20, 40); 
      ta.setFont(font); 
      for (String text : lines) { 
       ta.append(text + "\n"); 
      } 
      ta.setCaretPosition(0); 
      add(new JScrollPane(ta)); 
     } 

     @Override 
     public Dimension getPreferredSize() { 
      return new Dimension(200, 200); 
     } 

    } 
} 
+0

@AndrewThompson的問題是,如果是OP(如我懷疑)是來自外部過程的管道內容,'JTable'可能不是最適合的解決方案,因爲您需要解析文本,這隻會是一個痛苦......手指...... – MadProgrammer 2014-09-19 01:58:46

+0

True ,但你需要解析它以便在'JEditorPane'中使用。 – 2014-09-19 02:00:01

+1

@Andrew湯普森是真的,只是拋出一些想法:P - 添加JTable作爲暗示 – MadProgrammer 2014-09-19 02:00:40

相關問題