1

以下の内容の入力 file-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 に対して同時に描画することはできません。各行の 4 つの double 値は、長方形の 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 の 3 つの長方形を同時に描画するにはどうすればよいですか?

4

1 に答える 1

2
  • File外で読んでpaint()、前にそれを準備して、

  • paint()1秒間に数回起動される可能性があるため、FIleIOはGUI全体をフリーズする可能性があります

    a)イベントMouseからKeyBoard

    b)必要JComponentに応じて、内部でイベントを発生させるrepaint()

  • paintComponent()の代わりpaint()に使用JComponent

  • すべてCharのsをListまたはに入れてArrayList

  • を使用して配列内paintComponent()をループするinsideGraphics2D.drawString()


  • なぜわざわざ、またはpainting in JComponentに置くStringJLabelJTextArea

  • 変化するBackGround

  • 透明なのでJLabel_setOpaque(true)JLabel

于 2012-11-06T07:28:35.563 に答える