我有一些在开头执行某些功能的类,它们写入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:
csis.txt和图形窗口的正面未正确格式化:
答案 0 :(得分:1)
您必须设置等宽字体才能实现此目的。尝试在for
方法的paint
循环之前添加这些行:
Font f = this.getFont();
g.setFont(new Font("monospaced", f.getStyle(),f.getSize()));
希望这有帮助,它对我有用。
正如MadProgrammer所说,你不应该覆盖JFrame#paint
方法。请改用JPanel并覆盖其paintComponent
方法以执行自定义绘制。
答案 1 :(得分:0)
paint
等顶级组件中的JFrame
。这些涂料的要求通常比普通成分更复杂,并且它们不是双缓冲的super.paintXxx
以确保您遵守复杂的油漆链paintXxx
方法中加载资源,这些资源应尽可能快地返回,以免降低绘制过程的速度。查看Performing Custom Painting了解详情
看看
对于某些字体建议......
您可以将文字加载到Graphics
或JTextArea
,而不是直接使用JTextPane
绘图。
请查看How to use text compnents了解详情
我也很想解析输入并将其加载到JTabe
有关详细信息,请参阅how to use tables