2012-04-12 7 views
-1

私はGUIに 'listTable'というJTable用のコンテナがあります。 AbstractTableModelを使用して、リンクされたリストに格納されたデータをJTableに取り込みたいとします。Java - LinkedListsを使用してAbstractTableModelからJTableにデータを追加する

基本的に、Processing.javaにLinkedListが格納されています。これには、テキストファイルから取得されたすべてのデータが含まれます。私はAbstractTableModelを作成して、JTableに読み込み方法を伝えました。ここでやりたいことは、GUI_gのJTableに「リンクされたリストの内容」を取り込むことです。

誰でもこの方法を教えていただけますか?

GUI_g:

import java.awt.*; 
import javax.swing.*; 
import javax.swing.JTable; 


public class GUI_g extends JFrame { 

    public void buildGui() { 

     JFrame frame = new JFrame("Hotel TV Scheduler"); 

       JPanel mainPanel = new JPanel(); 
     mainPanel.setLayout(new BorderLayout(0,0)); 

       JPanel chPanel = new JPanel(); 
       chPanel.setLayout(new GridLayout(3,1)); 

       JPanel listPanel = new JPanel(); 
       listPanel.setLayout(new GridLayout(3,2,1,0)); 

       JPanel infoPanel = new JPanel(); 
     infoPanel.setLayout(new GridLayout(0,3, 1, 0)); 


       JPanel addPanel = new JPanel(); 
     addPanel.setLayout(new GridLayout(0,3)); 

       JPanel chlblPanel = new JPanel(); 
       chlblPanel.setLayout(new GridLayout(1,2)); 

       JPanel tablePanel = new JPanel(); 
       tablePanel.setLayout(new GridLayout(1,2)); 

       JPanel rmvbtnPanel = new JPanel(); 
       rmvbtnPanel.setLayout(new GridLayout(1,2)); 

       JPanel centrePanel = new JPanel(); 
       centrePanel.setLayout(new GridLayout(0,3)); 


      // mainPanel.add(chPanel, BorderLayout.WEST); 
      // mainPanel.add(listPanel, BorderLayout.EAST); 
       mainPanel.add(centrePanel, BorderLayout.CENTER); 


       JTable chOneTable = new JTable(); 
       JTable chTwoTable = new JTable(); 

       JTable listTable = new JTable(new ProgramTableMode()); 

       JLabel ch1Label = new JLabel("Channel 1"); 
       JLabel ch2Label = new JLabel("Channel 2"); 
       JLabel listLabel = new JLabel("List"); 

       JButton rmvChOneButton = new JButton("Remove Channel"); 
       JButton rmvChTwoButton = new JButton("Remove Channel"); 

       chlblPanel.add(ch1Label); 
       chlblPanel.add(ch2Label); 

       tablePanel.add(chOneTable); 
       tablePanel.add(chTwoTable); 

       rmvbtnPanel.add(rmvChOneButton); 
       rmvbtnPanel.add(rmvChTwoButton);    

       chPanel.add(chlblPanel); 
       chPanel.add(tablePanel); 
       chPanel.add(rmvbtnPanel); 

       listPanel.add(listLabel); 
       listPanel.add(listTable);     

       JLabel titleLabel = new JLabel("Title"); 
       JLabel genreLabel = new JLabel("Genre"); 
       JLabel durationLabel = new JLabel("Duration"); 
       JLabel actorLabel = new JLabel("Actor"); 
       JLabel directorLabel = new JLabel("Director"); 
       JLabel rentableLabel = new JLabel("Rentable"); 
       JLabel synLabel = new JLabel("Synopsis"); 

       JTextField txtTitle = new JTextField();   
       JTextField txtGenre = new JTextField(); 
       JTextField txtDuration = new JTextField(); 
       JTextField txtActor = new JTextField(); 
       JTextField txtDirector = new JTextField(); 
       JTextField txtSynopsis = new JTextField(); 

       JCheckBox rentCB = new JCheckBox(); 

       JButton btnAddProg = new JButton("Add Program"); 

       JList channelList = new JList(); 
       JList timeList = new JList(); 

       infoPanel.add(titleLabel); 
       infoPanel.add(txtTitle); 
       infoPanel.add(new JLabel(" ")); 
       infoPanel.add(genreLabel); 
       infoPanel.add(txtGenre); 
       infoPanel.add(new JLabel(" ")); 
       infoPanel.add(durationLabel); 
       infoPanel.add(txtDuration); 
       infoPanel.add(new JLabel(" ")); 
       infoPanel.add(actorLabel); 
       infoPanel.add(txtActor); 
       infoPanel.add(new JLabel(" ")); 
       infoPanel.add(directorLabel); 
       infoPanel.add(txtDirector); 
       infoPanel.add(new JLabel(" ")); 
       infoPanel.add(rentableLabel); 
       infoPanel.add(rentCB); 
       infoPanel.add(new JLabel(" ")); 
       infoPanel.add(synLabel); 
       infoPanel.add(txtSynopsis); 
       infoPanel.add(new JLabel(" ")); 
       infoPanel.add(btnAddProg); 
       infoPanel.add(channelList); 
       infoPanel.add(timeList); 

       centrePanel.add(chPanel); 
       centrePanel.add(infoPanel); 
       centrePanel.add(listPanel); 

       frame.add(mainPanel); 
       frame.setVisible(true); 


    } 


} 

ProgramTableModel:

import java.util.List; 

import javax.swing.table.AbstractTableModel; 

public class ProgramTableModel extends AbstractTableModel{ 

    protected String[] columnNames = {"Type","Title","Length"}; 

    private List<Program> data; 


    public ProgramTableModel (List<Program> data){ 
     this.data = data; 
    } 

    public int getColumnCount() { 
     return 3; 
    } 

    public int getRowCount() { 
     return data.size(); 
    } 

    public String getColumnName(int column) { 
     return columnNames[column]; 
    } 

    public Object getValueAt(int row, int column) { 

      switch (column){ 
      case 0: return data.get(row).getCategory(); 
      case 1: return data.get(row).getTitle(); 
      case 2: return data.get(row).getDuration(); 
      default: return "N/A"; 
      } 

    } 
} 

処理:

import java.io.*; 
import java.util.*; 


public class Processing 
{ 
    List<Program> schedule = new LinkedList<Program>(); 

    public void readAllData() { 

     try{ 
      FileInputStream fstream = new FileInputStream("file.txt"); 

      DataInputStream in = new DataInputStream(fstream); 
      BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
      String tempString = null; 





      while ((tempString = br.readLine()) != null) { 


       String[] row = tempString.split("-"); 

       if(row[0].compareTo("COMEDY") == 0) { 

        Comedy comedy = new Comedy(row[0], row[1], Integer.parseInt(row[2]), row[3], row[4], Boolean.parseBoolean(row[5])); 
        schedule.add(comedy); 

       } 

       else if(row[0].compareTo("DRAMA") == 0) { 

        Drama drama = new Drama(row[0], row[1], Integer.parseInt(row[2]), row[3], row[4], Boolean.parseBoolean(row[5])); 
        schedule.add(drama); 

       } 

       else if(row[0].compareTo("MUSIC") == 0) { 

        MusicVideo music = new MusicVideo(row[0], row[1], Integer.parseInt(row[2])); 
        schedule.add(music); 

       } 

       else if(row[0].compareTo("HOTEL") == 0) { 

        HotelInfo hotel = new HotelInfo(row[0], row[1], Integer.parseInt(row[2])); 
        schedule.add(hotel); 

       } 

      } 
      in.close(); 

     } 

     catch (Exception e){ 
      System.err.println("Error: " + e.getMessage()); 
     } 
    } 

    public void getAll() 
    { 
     for (Program p: schedule) 
     { 
      System.out.println(p.getTitle() + p.getDuration() + p.getCategory() + p); 
     } 
    } 

} 
+0

あなたの居場所を正確に教えていただけますか?あなたの現在の質問は幅広いところであり、皆さんにチュートリアルを書く必要がほとんどあります。 –

+0

基本的に、Processing.javaにLinkedListが格納されています。これには、テキストファイルから取得されたすべてのデータが含まれます。私はAbstractTableModelを作成して、JTableに読み込み方法を伝えました。ここでやりたいことは、GUI_gのJTableに「リンクされたリストの内容」を取り込むことです。主な質問を更新します。 – Brian

+0

*もう一度、あなたのモデルにどのように追加しようとしましたか?現在の試行はどこで失敗していますか? –

答えて

0

あなたがにリセットmethosを追加することができます。ここ

コードですそしてちょうどlistTableに関連付けられているモデルオブジェクトにreset()を呼び出す

public reset (List<Program> data){ 
    this.data = data; 
} 

:内部リストをリセットします。これは、GUIからそのオブジェクトを保存して公開する必要があることを意味します。

+0

それは 'public ProgramTableModel(List データ)と同じではありません{ \t \t this.data = data; \t}「 ありますか? – Brian

+0

問題はProgramTableModelではなく、GUI上にあります。どうすればいいですか?どのように私はProgramTableModelを呼び出すのですか? – Brian

+0

これは同じではありません:あなたがちょうどコメントに記載されているものはコンストラクタです - オブジェクトは一度しか作成できません。必要に応じてモデルを新しいものに置き換えることはできますが、モデルの代わりにJTableを公開する必要があります。モデル上でメソッドを呼び出す方法:格納する場所を決める必要があります。GUI_gオブジェクトにアクセスできる場合はそれを使用できます。それ以外の場合は、両方の場所にあるクラスにモデルを格納します(GUIとモデルpopulator)は(より正確には同じオブジェクトに)アクセスできます。あなたは、この共通のオブジェクトを例えばmainで作成し、それを他の人に渡すことができます – Attila

関連する問題