2014-01-28 3 views
0

웹 사이트에서 가져온 정보 (가격 및 항목 이름)로 JTable을 채우려고합니다. 나는 사용자에게 URL을 입력하도록 요청하는 클래스를 가지고 있으며 가격뿐만 아니라 항목 이름과 URL도 스캔합니다. 현재 파싱 된 모든 정보를 가져 와서 가격, 항목 이름 및 URL에 대한 세 가지 텍스트 파일에 저장합니다. 이 정보로 3 개의 열 (항목 이름, 가격 및 URL)을 포함하는 JTable을 채우려고하지만 새로운 페이지를 스캔 할 때마다 텍스트 파일을 덮어 쓰고 이전 정보가 손실됩니다. 텍스트 파일을 통해 JTable을 채울 필요는 없습니다. 정보를 얻으려면 JTable이 필요합니다. 여기 내 코드 중 일부입니다.구문 분석 된 정보로 JTable 채우기

public BestBuy (JFrame frame){ 
      super (frame, "Best Buy URL", true); 
      setLayout (new FlowLayout()); 

      label = new JLabel ("Enter Best Buy URL"); 
      add (label); 

      url = new JTextField ("Enter URL Here", 40); 
      add (url); 

      submit = new JButton ("Submit"); 
      add (submit); 

      event b = new event(); 
      submit.addActionListener (b); 
     } 

     public class event implements ActionListener{ 
      public void actionPerformed (ActionEvent b){ 
       try {  
        String datab = url.getText(); //perform your operation 
        datab = datab.trim(); 
        datab = datab.toLowerCase(); 
        Document document = Jsoup.connect(datab).get(); 
        String amountb = document.select(".amount").first().text(); 
        String nameb = document.select(".product-title").first().text(); 
        FileWriter stream = new FileWriter  ("C:\\Users\\Daniel\\Desktop\\price.txt"); 
        BufferedWriter out = new BufferedWriter (stream); 
        out.write(amountb + "\n"); 
        out.newLine(); 
        out.close(); 
        FileWriter stream1 = new FileWriter ("C:\\Users\\Daniel\\Desktop\\itemName.txt"); 
        BufferedWriter out1 = new BufferedWriter (stream1); 
        out1.write(nameb + "\n"); 
        out1.newLine(); 
        out1.close(); 
        FileWriter stream2 = new FileWriter ("C:\\Users\\Daniel\\Desktop\\url.txt"); 
        BufferedWriter out2 = new BufferedWriter (stream2); 
        out2.write(datab + "\n"); 
        out2.newLine(); 
        out2.close(); 
       } 
       catch (Exception ex) { 

       } 
       setVisible (false); 
      } 

이 클래스는 베스트 바이 (Best Buy) URL에 대한 사용자 요청 및 아이템 이름에 대한 특정 페이지를 구문 분석, 가격은 내 바탕 화면에있는 파일에 기록합니다.

public FirstGui(){ 
     setLayout (new FlowLayout()); 

     String[] columnName = {"Item Name", "Price", "URL"}; 

     Object [] [] data = { 

     }; 


     table = new JTable (data, columnName); 
     table.setPreferredScrollableViewportSize(new Dimension (500, 300)); 
     table.setFillsViewportHeight (true); 

     JScrollPane scrollpane = new JScrollPane (table); 
     add (scrollpane); 

이제 JTable에 파싱 된 정보를 얻으려고하고 있지만 어떻게 해야할지 잘 모릅니다. 나는 시도했다

public getdatab() { 
return datab; 
} 
public getnameb() { 
return nameb; 
} 
public getamountb() { 
return amountb; 
} 

그러나이 모든 문자열은 작동하지 않는 공백 내에 있습니다. 당신이 아마 볼 수 있듯이 나는 자바에 아주 익숙하지 않다. 그리고 이것은 명백한 해답을 가지고 있을지 모르지만, 나는 이것을 며칠 동안 붙잡고 그것을 이해할 수 없다. 고맙습니다.

+0

'getdatab()'에는 리턴 유형이 없습니다. 그게 네가 무효라는 뜻인가? – csmckelvey

+0

모델을 설정하고 (데이터로 채워야 함) setTableModel() 메소드를 사용하여 테이블에 연결해야합니다. – KernelPanic

답변

1

정확히 어떻게 데이터를 얻는 지 잘 모르겠지만이 같은 것을하고 싶습니다. 세 가지 다른 파일에 데이터를 쓰려고하기 때문에 세 가지 스트림에서 데이터가 들어오고 있다고 가정합니다. 그래도 문제가 있습니다. 이 작업을하려면 모든 데이터가 병렬로 있어야합니다. 즉 첫 번째 항목은 첫 번째 가격과 첫 번째 URL과 일치해야합니다. 이 경우, 이와 같은 작업을 수행 할 수 있습니다.

  1. 3 개의 별도 목록이 있습니다.

  2. 그런 다음 파일에 추가하려는 각 항목에 대해 목록에 추가하십시오.

  3. 는 목록의 데이터를 사용하여, 당신의 JTable

    String[] columnName = {"Item Name", "Price", "URL"}; 
    DefaultTableModel model = new DefaultTableModel(columnNames, 0); 
    table = new JTable(model); 
    
  4. 이제 방금 추가 할 수있는 행의 모델로 DefaultTableModel를 사용합니다. rowObjects

    for (int i = 0; i < names.size(); i++) { 
        String name = names.get(i); 
        String price = prices.get(i); 
        String url = urls.get(i); 
    
        model.addRow(new Object[] { name, price, url }); 
    } 
    
    모든 작업이 완료

의 배열 방법 model.addRow(row)를 사용합니다. 모델이 테이블을 동적으로 업데이트합니다. 그러나 내가 말했던 것처럼 목록에있는 데이터는 원하는 결과를 얻으려면 서로 동기화되어야한다는 것을 기억하십시오.

한 번에 하나의 열 대신에 한 번에 한 행의 데이터 만 가져 오는 것이 훨씬 쉽습니다. 각 데이터 세트가 들어 오면 5 단계에서와 같이 행으로 추가하십시오.

+0

"형식 목록이 일반이 아니며 인수가 으로 매개 변수화 될 수 없습니다"라는 오류가 나타납니다.전에 목록을 사용한 적이 없으므로 여기에서 무슨 일이 일어나는지 실제로 알지 못합니다. – user3216518

+0

Lake에서'java.awt.List'가 아니라'java.util.List'를 임포트했는지 확인합니다. –