2012-07-22 1 views
2

내가 작업 해본 프로그램에서 새로운 데이터로 테이블을 새로 고침해야합니다. 현재 GUI를 처음 접한 이래로 새로운 GUI로 전체 GUI를 새로 고칠 예정이었습니다. 내 프로그램에서이 작업을 수행하지만 이전 GUI에서 빌드를 마칩니다.스윙에서 테이블 모델 또는 GUI 새로 고침 Java

프로젝트를 계속 진행하고 다시 빌드 할 수있을 때까지 진행하려면 두 가지 중 하나를 수행하고 싶습니다. 이전 GUI를 무효화하거나 새 GUI를 사용하거나 테이블 모델을 편집하십시오. 지금은 JTable으로 생성 한 이후로 DefaultTableModel을 사용하고 있습니다. 세 키 파일은

AppGUI.java

//compile javac -cp ;./jsoup-1.6.3.jar;commons-logging-1.1.1.jar;commons-httpclient-3.0.1.jar;commons-codec-1.6.jar;httpclient-4.2.jar AppGUI.java 

public class AppGUI extends JFrame{ 

public AppGUI(Company company)throws Exception { 

     retrieveGUI(company); 
} 

public void retrieveGUI(Company company){ 
     this.company = company; 
     incomeStatementPane = new IncomeStatementPane(); 
     balanceSheetPane = new BalanceSheetPane(); 
     cashFlowsPane = new CashFlowsPane(); 

     JTabbedPane leftTabbedPane = new JTabbedPane();    //Left Pane 
     JComponent panel1 = incomeStatementPane.render(company);   //Income Statement 
     leftTabbedPane.addTab("Income Statement", panel1); 
     leftTabbedPane.setMnemonicAt(0, KeyEvent.VK_1); 
     JComponent panel2 = balanceSheetPane.render(company);    //Balance Sheet PAnel 
     leftTabbedPane.addTab("Balance Sheet", panel2); 
     leftTabbedPane.setMnemonicAt(1, KeyEvent.VK_2); 
     JComponent panel3 = cashFlowsPane.render(company);     //Cash Flows Panel 
     leftTabbedPane.addTab("Cash Flows", panel3); 
     leftTabbedPane.setMnemonicAt(2, KeyEvent.VK_3); 

     JTabbedPane rightTabbedPane = new JTabbedPane();   //Right Pane 
     JComponent panel4 = LiquidityPane.render(company);     //Liquidity 
     rightTabbedPane.addTab("Liquidity", panel4); 
     //ratioTabbedPane.setMnemonicAt(3, KeyEvent.VK_4); 
     JComponent panel5 = ProfitabilityPane.render(company);    //Profitability 
     rightTabbedPane.addTab("Profitability", panel5); 
     //ratioTabbedPane.setMnemonicAt(4, KeyEvent.VK_5); 
     JComponent panel6 = LongTermSolvencyPane.render(company);   //Long Term Solvency 
     rightTabbedPane.addTab("Long Term Solvency", panel6); 
     //ratioTabbedPane.setMnemonicAt(5, KeyEvent.VK_6); 
     JComponent panel7 = CashFlowAdequacyPane.render(company);   //Cash Flow 
     rightTabbedPane.addTab("Cash Flow", panel7); 

     add(rightTabbedPane, BorderLayout.CENTER); 
     add(leftTabbedPane, BorderLayout.WEST); 
     JPanel bottomPanel = new JPanel(); 
     bottomPanel.setBackground(new Color(150, 150, 150)); 

     JButton computeBtn = new JButton("Compute Ratios"); 
     //ActionListener computeBtnListener = new computeListener();  //computebutonlistener 
     //computeBtn.addActionListener(computeBtnListener);  //actionlistener 

     //compute() 
     bottomPanel.add(computeBtn, BorderLayout.EAST); 

     JPanel tickerPanel = new JPanel(); 
     JLabel tickerLabel = new JLabel("Search Ticker:"); 
     final JTextField tickerField = new JTextField(10); 


     JButton searchBtn = new JButton("Search"); 
     searchBtn.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e){ 
       final String newTicker = tickerField.getText(); 
      try{ 
      refresh(tickerField.getText()); 
      } 
      catch(Exception ae){} 
      } 
     }); 



     tickerPanel.add(tickerLabel/*, BorderLayout.WEST*/); 
     tickerPanel.add(tickerField/*, BorderLayout.WEST*/); 
     tickerPanel.add(searchBtn); 
     add(tickerPanel, BorderLayout.NORTH); 
     add(bottomPanel, BorderLayout.SOUTH); 


} 

public void setCompany(Company company) { 
    this.company = company; 
} 

// Enter new symbol. 
// compnay 

public void refresh(String newTicker)throws IOException{ 
Company newCompany = new Company(newTicker); // Creates new Company. Updating methods are called from constructor automatically. 
//System.out.println(newTicker); 
//frame.invalidate(); 
//frame.validate(); 

retrieveGUI(newCompany);  // Stuff from contstructor.  
} 

//public void retrieveNewData(String newTicker){ 
//Company newCompany = new Company(newTicker); 

//} 



private Company company;//company from ticker JLabel 
private IncomeStatementPane incomeStatementPane; 
private BalanceSheetPane balanceSheetPane; 
private CashFlowsPane cashFlowsPane; 

    public static void main(String[] args) throws Exception{ 
     Company company = new Company("FTK"); // Creates new Company. Updating methods are called from constructor automatically. 
     AppGUI frame = new AppGUI(company); // Creates new App GUI. Various panes are initialized from constructor. 
     frame.retrieveGUI(company); 
     frame.setTitle("Financial Calculator | Ratios"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setMinimumSize(new Dimension(1000, 500)); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

//  public compute(){ 
//   refresh(); 
//   render(); 
//  } 

} 

Company.java

public class Company { 
//Variables and Objects 

String Ticker; 

private Object[][] incomeStatementInfo = new String[52][11]; 
private Object[][] balanceSheetInfo = new String [46][11]; 
private Object[][] cashFlowsInfo = new String [22][11]; 


Company(){} 

Company(String newTicker)throws IOException{ 
    this.Ticker = newTicker; 
    updateCompanyInfo(); 
} 

    //Get Methods 
    public Object[][] getIncomeStatementInfo() { 
     return incomeStatementInfo; 
    } 

    public Object[][] getBalanceSheetInfo(){ 
     return balanceSheetInfo; 
    } 
    public Object[][] getCashFlowsInfo(){ 
     return cashFlowsInfo; 
    } 

    public void investoolsLogin(){ 
    HttpClient client = new HttpClient(); 

    GetMethod method = new GetMethod("https://online.investools.com/authentication/auth.iedu"); 
    client.getParams().setParameter("userid", "d*********"); 
    client.getParams().setParameter("password", "S****"); 
    client.getParams().setParameter("http.protocol.single-cookie-header", true); 
    client.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY); 
    } 

    //Updating Methods from Internet or computer 
    public void updateCompanyIs()throws IOException{ 

    File f = new File ("Data/"+(Ticker)+"/IS.txt"); 
    if(f.exists() == true){ 


     Scanner input = new Scanner(f); 

     while (input.hasNextLine()){  
     for (int row = 0, row_size = incomeStatementInfo[row].length; row < row_size; row++){ 
       for (int col = 0, col_size = incomeStatementInfo.length; col < col_size; col++){ 
        if(input.hasNextLine()){ 
        incomeStatementInfo[col][row] = input.nextLine(); 
        } 
       } 
      }   
     } 
    } 

    if(f.exists() == false){ 
    //OptionPane.showMessageDialog("Offline Ticker Data Does Not Exist"); 
     investoolsLogin(); 

     Document doc = Jsoup.connect("http://toolbox.investools.com/graphs/fundamentalAnalysis.iedu?report=BS&symbol="+(Ticker)).get(); 

     System.out.println("doc is null: " + (doc == null)); 
     // Elements table = doc.select("table"); 
     Elements columns = doc.getElementById("fundamentalsForm").children().select("table").get(0).select("tr").get(0).select("td"); 
     Iterator<Element> columnIterator = columns.iterator(); 
     int col = 0; 
     int row = 0; 
       while (columnIterator.hasNext()) { 
        Element column = columnIterator.next(); 
        Elements rows = column.select("table").get(0).select("tr"); 
        Iterator<Element> rowsIterator = rows.iterator(); 
        col = col + 1; 
        while (rowsIterator.hasNext()){ 
        row = row + 1; 
        //Element rowIterator.next = ; 
        incomeStatementInfo[col][row] = rowsIterator.next(); 
       } 
      } 
     } 
    } 
    public void updateCompanyBs()throws IOException{ 

    File f = new File ("Data/"+(Ticker)+"/BS.txt"); 
    if(f.exists() == true){ 
     //OptionPane.showMessageDialog("Offline Ticker Data Does Not Exist"); 

     Scanner input = new Scanner(f); 
      while (input.hasNextLine()){ 
      for (int row = 0, row_size = balanceSheetInfo[row].length; row < row_size; row++){ 
       for (int col = 0, col_size = balanceSheetInfo.length; col < col_size; col++){ 
        if(input.hasNextLine()){ 
        balanceSheetInfo[col][row] = input.nextLine(); 
        } 
       } 
      }     
     } 
    } 
    if(f.exists() == false){ 
     investoolsLogin(); 

     Document doc = Jsoup.connect("http://toolbox.investools.com/graphs/fundamentalAnalysis.iedu?report=BS&symbol="+(Ticker)).get(); 
      // Elements table = doc.select("table"); 
     Elements columns = doc.select("fundamentalsForm").first().select("table").get(0).select("tr").get(0).select("td"); 
     Iterator<Element> columnIterator = columns.iterator(); 
     int col = 0; 
     int row = 0; 
       while (columnIterator.hasNext()) { 
        Element column = columnIterator.next(); 
        Elements rows = column.select("table").get(0).select("tr"); 
        Iterator<Element> rowsIterator = rows.iterator(); 
        col = col + 1; 
        while (rowsIterator.hasNext()){ 
        row = row + 1; 
        //Element rowIterator.next = ; 
        balanceSheetInfo[col][row] = rowsIterator.next(); 
       } 
      } 
     } 
    } 
    public void updateCompanyCf()throws IOException{ 

    File f = new File ("Data/"+(Ticker)+"/CF.txt"); 
    if(f.exists() == true){ 
     //OptionPane.showMessageDialog("Offline Ticker Data Does Not Exist"); 

     Scanner input = new Scanner(f); 
     while (input.hasNextLine()){  
       for (int row = 0, row_size = cashFlowsInfo[row].length; row < row_size; row++){ 
        for (int col = 0, col_size = cashFlowsInfo.length; col < col_size; col++){ 
         if(input.hasNextLine()){ 
         cashFlowsInfo[col][row] = input.nextLine(); 
         } 
        } 
       }       
      } 
     } 

    if(f.exists() == false){  
     investoolsLogin(); 

      Document doc = Jsoup.connect("http://toolbox.investools.com/graphs/fundamentalAnalysis.iedu?report=BS&symbol="+(Ticker)).get(); 
      // Elements table = doc.select("table"); 
      Elements columns = doc.getElementById("fundamentalsForm").children().select("table").get(0).select("tr").get(0).select("td"); 
      Iterator<Element> columnIterator = columns.iterator(); 
      int col = 0; 
      int row = 0; 
       while (columnIterator.hasNext()) { 
        Element column = columnIterator.next(); 
        Elements rows = column.select("table").get(0).select("tr"); 
        Iterator<Element> rowsIterator = rows.iterator(); 
        col = col + 1; 
        while (rowsIterator.hasNext()){ 
        row = row + 1; 
        //Element rowIterator.next = ; 
        cashFlowsInfo[col][row] = rowsIterator.next(); 
       } 
      } 
     } 
    } 
public void updateCompanyInfo() throws IOException { 
     updateCompanyIs(); 
     updateCompanyBs(); 
     updateCompanyCf(); 

} 
} 

및 IncomeStatePane.java (내가하는 TableModel를 구축 유사한 다른 객체 클래스와 함께

public class IncomeStatementPane { 

public static JComponent render(Company company) { 
    // Refreshes all cells 
    //Parse HTML for object company 
    String[] columnNames = {"","Year","Year", "Year", "Year", "Year","Year","Year", "Year", "Year", "Year"}; 

    Object[][] is = company.getIncomeStatementInfo(); 

    JPanel isPanel = new JPanel(); 
    JTable isTable = new JTable(is, columnNames); 
    JScrollPane scrollPane = new JScrollPane(isTable); 
    isPanel.add(scrollPane, BorderLayout.CENTER); 

    return isPanel; 
    } 
} 

완전히 편집 가능한 버전은 @http://dl.dropbox.com/u/43354605/IS.zip

입니다.

AppGUI에서 무효화 및 다시 그리기를 수행하거나 티커 검색을 실행할 때 테이블 모델을 업데이트하는 방법은 무엇입니까? (나는 GUI 새로 고침이 이상적이지 않을 수도 있음을 알고 있지만 버전에 대한 최소한의 재구성으로 계속 진행하고 싶다.) 누군가가 나를 따라 프로젝트를 움직일 수있는 통찰력이 있다면 그것은 위대 할 것입니다. 추신 : 두 번째 gui가 이전 gui에서 어떻게 새로 고쳐 졌는지 보려면 창을 최대화해야합니다.

답변

2

테이블 모델을 수정하기 만하면됩니다. 뷰 자체를 새로 고침 할 적절한 이벤트를 발생시킵니다. 예를 들어, 새 행을 추가합니다 :

DefaultTableMode model = (DefaultTableModel) table.getModel(); 
model.addRow(newRow); 

javadoc of DefaultTableModel 가능한 모든 작업을 알고 찾습니다. 그리고 tutorial about JTable을 읽으십시오.

+1

둘 다 읽었지만 어디에서해야할지 모르겠습니다. 새로운 행을 추가 할 필요가 없으며 새로운 재무 제표를 가져옵니다. 같은 행과 열. 튜토리얼을 탐색했지만 내 모델이 다른 클래스에 있으므로 내 새로 고침 메서드에서이를 수행하는 방법을 잘 모릅니다. 그게 내가 주로 혼란스러워하는 곳. – user1093111