我無法弄清楚如何在Java程序中輸出流時保留命令提示符的格式。任何人有任何建議?如何在jTextArea(或其他類型的控制檯)內保留命令提示符的格式?
回答
有根據你的數據是如何得出的爲您提供了一些可能的解決方案......
最基本的就是要確保你使用的是固定寬度的字體...
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));但是,如果您切換爲粗體或斜體或粗體斜體,則會生成該線並正常工作。
我不敢苟同......
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);
}
}
}
@AndrewThompson的問題是,如果是OP(如我懷疑)是來自外部過程的管道內容,'JTable'可能不是最適合的解決方案,因爲您需要解析文本,這隻會是一個痛苦......手指...... – MadProgrammer 2014-09-19 01:58:46
True ,但你需要解析它以便在'JEditorPane'中使用。 – 2014-09-19 02:00:01
@Andrew湯普森是真的,只是拋出一些想法:P - 添加JTable作爲暗示 – MadProgrammer 2014-09-19 02:00:40
- 1. 如何使Windows控制檯\命令提示符顯示顏色?
- 2. JTextArea在其他JFrame顯示實時控制檯輸出
- 3. 如何在命令提示符下更改控制檯中的字符?
- 4. Java中的多個命令提示符/控制檯?
- 5. 如何在命令提示符下更改%date%的格式?
- 6. 調用命令,並保留原有格式和數據類型
- 7. 如何更改C#控制檯應用程序的命令提示符
- 8. Grails控制命令提示符
- 9. 從Python控制Windows命令提示符
- 10. 控制檯/命令提示符應用.NET/C#
- 11. C#控制檯程序不會從命令提示符執行
- 12. 打印到控制檯/命令提示符
- 13. 控制提示命令行
- 14. 備用命令提示符或控制檯應用程序運行Ruby腳本
- 15. 如何將控制檯輸出數據導入命令提示符?
- 16. 命令提示符複製
- 17. 控制檯/命令提示全屏在Windows Vista/7
- 18. 表單應用程序 - 輸出到命令提示符而不創建其他控制檯
- 19. 如何在登錄時運行命令並使其顯示在控制檯中?
- 20. 從控制器的Symfony3控制檯運行控制檯命令
- 21. 從其他類的VB.NET控制表格
- 22. 如何顯示從控制檯到JTextArea的輸出
- 23. 使用字符串或其他格式比較數據類型
- 24. 在工作的IDLE控制檯中獲取保留字的提示?
- 25. 如何格式化IRB命令提示符
- 26. 如何停止批處理文件保留命令行控制
- 27. 如何寫在命令提示符下的第二級命令
- 28. heroku控制檯命令添加類別
- 29. 如何從命令行Java應用程序更改命令提示符(控制檯)窗口標題?
- 30. 如何將Tkinter控件保留在其他控件上
你需要確保你使用的是固定寬度的字體 – MadProgrammer 2014-09-18 21:10:21