我有一个带有以下内容的输入文件-file.txt
M1 100 100 400.89 400.72 400 400 450.89 450.72
M2 100 100 440.56 440.82
M3 100 200 300.52 330.75
200 200 320.53 340.34
300 300 400.43 350.25
我编写了一个绘制矩形的程序。但是我无法同时为M1,M2和M3绘制它。每行中的四个双值代表一个矩形的2个坐标。如果我的文件是
,请帮我解决这个问题M1 = [100 100 400.89 400.72;
400 400 450.89 450.72]
M2 = [100 100 440.56 440.82]
M3 = [100 200 300.52 330.75;
200 200 320.53 340.34;
300 300 400.43 350.25]
我写的代码是:
import java.util.*;
import java.io.*;
import java.awt.*;
import java.awt.geom.*;
import java.awt.image.*;
import java.awt.event.*;
import javax.swing.*;
import java.lang.*;
import java.math.*;
import java.text.DecimalFormat.*;
class Rectangles extends JComponent
{
public void paint(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
try
{
File x=new File("file.txt");
Scanner sc=new Scanner(x);
while(sc.hasNext())
{
String s=sc.next();
if(s.equals("M1"))
{
while(sc.hasNext())
{
double x1=sc.nextDouble();
double y1=sc.nextDouble();
double x3=sc.nextDouble();
double y3=sc.nextDouble();
double x2=x3;
double y2=y1;
double x4=x1;
double y4=y3;
double a=x1;
double b=y1;
double c1=Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
double d1=Math.sqrt((x4-x1)*(x4-x1)+(y4-y1)*(y4-y1));
double c=c1;
double d=d1;
g2.setPaint(Color.blue);
g2.draw(new Rectangle2D.Double(a,b,c,d));
g2.fill(new Rectangle2D.Double(a,b,c,d));
}
}
}}
catch(Exception e)
{
System.out.println("reported Exception");
}
}
}
public class eighth
{
public static void main(String[] args)throws IOException
{
JFrame window = new JFrame();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setBounds(60, 60, 900, 900);
window.getContentPane().add(new Rectangles());
window.setVisible(true);
}
}
如何同时绘制M1,M2和M3三个矩形?
答案 0 :(得分:2)
在File
之外阅读paint()
,之前做好准备,
因为paint()
每秒可以被触发几次,所以FIleIO可以冻结整个GUI
a)来自Mouse
和KeyBoard
事件
b)JComponent
内部触发事件,需要repaint()
时
使用paintComponent()
代替paint()
JComponent
将所有Char
放入List
或ArrayList
,
在paintComponent()
内使用Graphics2D.drawString()
为什么要打扰painting in JComponent
,将String
加入JLabel
或JTextArea
更改BackGround
JLabel
必须setOpaque(true)
,因为JLabel
是透明的