Plik txt odczyt danych i wprowadzenie ich do programu.

0

Witam mam problem mianowicie nie wiem w jaki sposób odczytać pliki po zaimplementowaniu ich już z txt mianowicie musze odczytać pliki txt i narysowac na bazie tego figury w GUI . plik txt jest tam
30 30 30
49 20 21 20

odczytuje to

package ZadOStr;


import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class WczytajPlik {

    List<String> lista = new ArrayList<String>();

    public WczytajPlik(){    }

    public void readFile(String filePath) throws IOException {
        FileReader fr = null;

           String linia = "";
           try {
             fr = new FileReader(filePath);
           } catch (FileNotFoundException e) {
               System.out.println("BŁĄD PRZY OTWIERANIU PLIKU!");
               System.exit(1);
           }

           BufferedReader bfr = new BufferedReader(fr);
           try {
             while((linia = bfr.readLine()) != null){
               lista.add(linia);
             }
            } catch (IOException e) {
                System.out.println("BŁĄD ODCZYTU Z PLIKU!");
                System.exit(2);
           }

           try {
             fr.close();
            } catch (IOException e) {
                 System.out.println("BŁĄD PRZY ZAMYKANIU PLIKU!");
                 System.exit(3);
                }
            }
    public void rysuj(){
        for(int i=0;i<lista.size();i++){
            String patternString2 = "[0-9]+";
            String patternString1 = "[0-9]+ [0-9]+ [0-9]+[0-9]+|[0-9]+ [0-9]+ [0-9]+";

            Pattern pattern = Pattern.compile(patternString1);
            Matcher matcher = pattern.matcher(lista.get(i));
            while(matcher.find()) {
                System.out.println( matcher.group());
            }

        }

    }
}

i klasa GUI musi to rysowac tam już sobie poradze tylko nie wiem jak teraz wyciagnąć

 
...
public void paintComponent(Graphics g) {
    super.paintComponent(g);
g.drawOvle(???????????dane z txt??????????);
}

Proszę o pomoc

0

Nie wiem jaki jest sens geometryczny liczb odczytywanych z pliku. Gdybym wiedział, to kod mógłby być lepszy.

List<ArrayList<Integer>> figury = new ArrayList<ArrayList<Integer>>();
...
while((linia = bfr.readLine()) != null){
    ArrayList<Integer> figura = new ArrayList<Integer>();
    while(linia.hasNextInt()){
        figura.add(linia.nextInt());
    }
    figury.add(figura);
}
...
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    for(int i=0;i<figury.size();i++){
        //narysuj figurę
    }
}
0

x y r to okrąg o środku (x, y) i promieniu r,
x y z t to prostokąt o przeciwległych wierzchołkach (x,y) i (z, t),

0

cały problem pelega na tym ze mi sie te dane wyswietlaja na konsoli ale jak teraz przypisać pierwszą cyfre do x 2 do y i 3 do r
problem typu
w liscie mam
40 40 40
jak to przenieść ?
splitem?
jak zrobić zeby było
g.drawOvle(40,40,40);

0
List<Shape> figury = new ArrayList<Shape>();
...
while((linia = bfr.readLine()) != null){
    ArrayList<Integer> parametry = new ArrayList<Integer>();
    while(linia.hasNextInt())
    {
         parametry.add(linia.nextInt());
    }
    if(parametry.size() == 3)
    {
         int x = parametry.get(0);
         int y = parametry.get(1);
         int r = parametry.get(2);
         figury.add(new(Ellipse2D.Float(2*r,2*r,x,y)));
    }
    if(parametry.size() == 4)
    {
         int x1 = parametry.get(0);
         int y1 = parametry.get(1);
         int x2 = parametry.get(2);
         int y2 = parametry.get(3);
         figury.add(new(Rectangle2D.Float(x1,y1,x2-x1,y2-y1)));
    }    
}
...
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D)g;
    for(Shape figura:figury){
        g2.drawShape(figura);
    }
}

(nie testowane)
Co to jest ovle?

0

drawOval rysuje okrąg i nie rozumem linia.hasNextInt()- mi nie działa ?? linia.nextInt() te 2 metody mi nie działaja

0
<spam> ja wiem że pewnie pan profestor ryszard pokazywał inaczej, ale można ten plik czytać ładnie i po ludzku:
Files.lines(Paths.get("c:/temp", "data.txt")).forEach(System.out::println);
</spam>
0

Mój błąd.

    ArrayList<Integer> parametry = new ArrayList<Integer>();
    Scanner sc = new Scanner(linia);
    while(sc.hasNextInt())
    {
         parametry.add(sc.nextInt());
    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1