2016-08-14 3 views
0

이미 벡터로 정의 된 하나의 Jtable을 파일 데이터와 동일한 카탈로그로 대체하는 것을 시도하고 있습니다. 여기에 내 코드 : 여기하나의 JTable을 다른 (가져 오기) Java로 바꿉니다

else if (e.getActionCommand().equals("import")) 
     { 
      JFileChooser file = new JFileChooser(); 
      int i = file.showOpenDialog(this); 

      if(i == JFileChooser.APPROVE_OPTION) 
      { 
       File f = file.getSelectedFile(); 
       String filePath = f.getPath(); 

       try 
       { 
        ObjectInputStream input = new ObjectInputStream(new FileInputStream(filePath)); 
        Vector vectorData = (Vector)input.readObject(); 
        data = new DefaultTableModel(vectorData, columNames); 
        table = new JTable(data); 

        labelStatus.setText("Archivo exitosamente importado."); 

       } catch (FileNotFoundException e1) 
       { 
        // TODO Auto-generated catch block 
        e1.printStackTrace(); 
       } 

문제는 수입을 JTable는 데이터를 실제 표가 하나의 수입에 의해 어떤 변화를 포함하는 파일을 선택하면 내가 어떻게 전환 할 수 있다는 것입니다? Jtable 설명이의 ContentPane (JPanel의)에 추가되어 여기

코드 :

//data & columnNames are the data tha i used originally with the old Jtable 
DefaultTableModel model = new DefaultTableModel(data, columnNames); 
     table = new JTable(model); 

     TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model); //Sorter Descending or Ascending the data. 
     table.setRowSorter(sorter); 

     JScrollPane scrollTable = new JScrollPane(table); 
     scrollTable.setBounds(22, 78, 764, 177); 
     scrollTable.setViewportView(table); 

     contentPane.add(scrollTable); 

참고 : 나는 하나의은 JTable 사용하고 DefaaultTableModel 글로벌 변수로 사용하고 가져 오기 방법에서 참조하면 ODL을 변경하려면 하나는 새로운 것이지만 같은 것을 사용합니다.

새로운 업데이트, 전체 기능 코드 :

public class Demo extends JFrame implements ActionListener 
{ 

    private JPanel contentPane; 
    DefaultTableModel data; 
    JTable table; 
    Vector<String> dataRow; 
    Vector<String> columnNames; 
    JScrollPane scrollTable; 

public Demo() throws FileNotFoundException, IOException, ClassNotFoundException 
    { 
     columnNames = new Vector<>(); 
     columnNames.addElement("Name"); 
     columnNames.addElement("Cc"); 
     columnNames.addElement("Age"); 
     columnNames.addElement("Phone"); 
     columnNames.addElement("Date"); 
     columnNames.addElement("Amount"); 

     ObjectInputStream in = new ObjectInputStream(new FileInputStream("C:/Users/Harry/Desktop/AA gym Database.txt")); 
     Vector data = (Vector)in.readObject(); //Add try catch instead of THROWS DECLARATION. 

                //rowData 
     DefaultTableModel model = new DefaultTableModel(data, columnNames); 
     table = new JTable(model); 



     TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model); //Sorter Descending or Ascending the data. 
      table.setRowSorter(sorter); 

      scrollTable = new JScrollPane(table); 
      scrollTable.setBounds(22, 78, 764, 177); 
      scrollTable.setViewportView(table); 

      contentPane.add(scrollTable); 

public void actionPerformed(ActionEvent e) 
    { 
     else if (e.getActionCommand().equals("import")) 
     { 
      JFileChooser file = new JFileChooser(); 
      int i = file.showOpenDialog(this); 

      if(i == JFileChooser.APPROVE_OPTION) 
      { 
       File f = file.getSelectedFile(); 
       String filePath = f.getPath(); 

       try 
       { 

        ObjectInputStream input = new ObjectInputStream(new FileInputStream(filePath)); 
        Vector vectorData = (Vector)input.readObject(); 
        data = new DefaultTableModel(vectorData, columnNames); 
        table.setModel(data); 
} 
} 
} 
} 
+0

'JFrame'에 새로운'JTable'을 추가 할 코드를 보여줄 수 있습니까? –

+0

프레임을 그릴 때 프레임에 테이블을 추가하는 것입니다. 나중에 새 테이블을 만듭니다. 이 _new_ 테이블을 프레임에 어디에 추가합니까? –

+0

잘못된 정보를 볼 수있는 충분한 정보가 없기 때문에 [mcve] 또는 [sscce] (http://sscce.org/)를 게시하십시오. 우리는 전체 코드가 필요하지는 않지만 적어도 실행 중이며 문제를 보여줄 수있는 코드를 우리의 IDE w/o 수정본에 복사하여 붙여 넣을 수 있다는 것을주의하십시오. 또한 질문하시는 내용이 명확하지 않은 점에 유의하십시오. 질문을 설명하면서 더 구체적이고 명확하게 작성하십시오. – Frakcool

답변

1
data = new DefaultTableModel(vectorData, columNames); 
table = new JTable(data); 

당신은 새로운 TableModel에 새로운 JTable의를 만들 수 있습니다.

문제는 절대로 GUI에 새 테이블을 추가하지 않는다는 것입니다. "table"변수에 대한 참조를 변경하고 GUI에 테이블을 추가 할 수는 없습니다.

그래서 해결책은 새로운 JTable을 만들지 않는 것입니다. 당신이 데이터를 변경하고자 할 때

data = new DefaultTableModel(vectorData, columNames); 
table.setModel(data); 

은 기본적으로 새로운 스윙 컴포넌트를 생성해서는 안 대신 당신은 단지 기존의 JTable의 TableModel에를 재설정합니다. 모델을 변경하십시오.

편집 : 당신은/저장 테이블을 복원 할 수있는 솔루션을 밖으로 Saving content of Interactive JTable to .txt file to read it upon next run

확인합니다.

+0

내가 시도했지만 : java.lang.ArrayIndexOutOfBoundsException : 5> = 5 오류가 발생했습니다 – Volazh

+0

@ -Camickr. 이미 제안 사항을 구현했지만 여전히 오류가 발생하는 전체 기능 코드를 게시했습니다. – Volazh

+0

@Volazh, '시도했지만 ...'나는 그 문제를 일으키는 성명을 잘 모른다. '나는 전체 기능 코드를 게시했습니다. 게시 한 코드는 실행할 수 없습니다. 우리는 당신의 입력 파일에 접근 할 수 없습니다. 테이블에 데이터를 저장하는 더 좋은 방법은 내 편집을 확인하십시오. – camickr

관련 문제