-1

我有几个类在开始时执行一些功能,它们写入 csis.txt。之后我会弹出一个窗口来显示 csis.txt 中的内容,并进行格式化。但是,它的格式不正确。这是我所拥有的:

import java.io.*;
import java.awt.*;
import java.util.Scanner;

public class Driver extends Canvas {


public Driver(){
    setSize(200, 200);
    setBackground(Color.white);
}

public static void main(String[] args) throws IOException {
    PrintWriter pw = new PrintWriter(new FileWriter("csis.txt"));
    MFQ mfq = new MFQ(pw);
    mfq.getJobs();
    mfq.outputHeader();
    mfq.runSimulation();
    mfq.outStats();
    pw.close();
    Driver GP = new Driver();


    Frame aFrame = new Frame();
    aFrame.setSize(1000, 1000);


    aFrame.add(GP);

    aFrame.setVisible(true);
}

public void paint(Graphics g) {
    try {
        Scanner fileScan = new Scanner(new File("csis.txt"));
        String s = fileScan.nextLine();
        for (int i = 20; fileScan.hasNext(); i += 20) {
            g.drawString(fileScan.nextLine(), 0, i);
        }
    }
    catch (IOException e) {
        System.err.println("Caught IOException: " + e.getMessage());
    }
}

}

csis.txt:

http://pastebin.com/Ynh6jqYk

csis.txt 的旁边和图形窗口格式不正确:

并排

4

2 回答 2

1

您必须设置等宽字体才能实现此目的。for尝试在方法中的循环之前添加这些行paint

Font f = this.getFont();
g.setFont(new Font("monospaced", f.getStyle(),f.getSize()));

希望这会有所帮助,它对我有用。


正如 MadProgrammer 指出的那样,您不应该覆盖该JFrame#paint方法。改用 JPanel 并覆盖其paintComponent方法以执行自定义绘画。

于 2013-09-15T20:43:17.167 回答
0
  1. 避免使用paint顶级组件,例如JFrame. 这些的油漆要求通常比普通组件更复杂,而且它们不是双缓冲的
  2. 您必须致电super.paintXxx以确保您尊重复杂的油漆链
  3. 尽量避免在任何paintXxx方法中加载资源,这些应该尽快返回,以免减慢绘制过程
  4. 输出是使用可变宽度字体的问题。To 表示每个单独的字符都有自己的宽度。相反,您需要尝试使用固定宽度的字体。

查看执行自定义绘画以获取更多详细信息

看一眼

对于一些字体建议...

Graphics您可以将文本加载到 aJTextArea或中,而不是直接使用 绘制JTextPane

查看如何使用文本组件了解更多详细信息

我也很想解析输入并将其加载到JTabe

查看如何使用表格了解更多详情

于 2013-09-15T20:37:17.473 回答