2014-02-10 3 views
0

У меня есть JDialog, где показано JTable, ячейка JTable является JButton, что открыть новый JFrame (CoveNew):JButton выполнять больше действий

public void birthstats(String stat) { 
    //System.out.println(classeMain); 
    String titolo=new String(); 
    if ("nascite".equals(stat)){ 
     titolo=lingua_corrente.getString("nascite_title"); 
     elencojLabel.setText(titolo); 
    } 
    else{ 
     titolo=lingua_corrente.getString("anella"); 
     elencojLabel.setText(titolo); 
    } 
    Dimension dimensioni = new Dimension(500, 700); 
    nascitejDialog.setSize(dimensioni); 
    nascitejDialog.setTitle("GesAll 1.0 - " + titolo); 
    nascitejDialog.setModal(true); 
    hatchlistijTable.setModel(new javax.swing.table.DefaultTableModel(
     new Object [][] { 
      {null, null, null, null, null} 
     }, 
     new String [] { 
      "Num", lingua_corrente.getString("coppiaLabel"), lingua_corrente.getString("annojLabel"), lingua_corrente.getString("jLabel8"), lingua_corrente.getString("NascitaLabel") 
     } 
    ) { 

     Class[] types = new Class [] { 
      java.lang.String.class, java.lang.String.class, java.lang.String.class, JButton.class, java.lang.String.class 
     }; 
     boolean[] canEdit = new boolean [] { 
      false, false, false, false, false 
     }; 

     @Override 
     public Class getColumnClass(int columnIndex) { 
      return types [columnIndex]; 
     } 

     @Override 
     public boolean isCellEditable(int rowIndex, int columnIndex) { 
      return canEdit [columnIndex]; 
     } 
    }); 
    hatchlistijTable.setShowGrid(true); 
    hatchlistijTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF); 
    hatchlistijTable.getColumnModel().getColumn(0).setHeaderValue("Num."); //Numero 
    hatchlistijTable.getColumnModel().getColumn(0).setResizable(false); 
    hatchlistijTable.getColumnModel().getColumn(0).setPreferredWidth(60); 
    hatchlistijTable.getColumnModel().getColumn(1).setHeaderValue(lingua_corrente.getString("coppiaLabel")); //coppia 
    hatchlistijTable.getColumnModel().getColumn(1).setResizable(false); 
    hatchlistijTable.getColumnModel().getColumn(1).setPreferredWidth(50); 
    hatchlistijTable.getColumnModel().getColumn(2).setHeaderValue(lingua_corrente.getString("annojLabel")); //anno 
    hatchlistijTable.getColumnModel().getColumn(2).setResizable(false); 
    hatchlistijTable.getColumnModel().getColumn(2).setPreferredWidth(50); 
    hatchlistijTable.getColumnModel().getColumn(3).setHeaderValue(lingua_corrente.getString("jLabel8")); //gabbia 
    hatchlistijTable.getColumnModel().getColumn(3).setResizable(false); 
    hatchlistijTable.getColumnModel().getColumn(3).setPreferredWidth(50); 
    if ("nascite".equals(stat)){ 
     hatchlistijTable.getColumnModel().getColumn(4).setHeaderValue(lingua_corrente.getString("schiusa")); //data nascita prevista 
    } 
    else{ 
     hatchlistijTable.getColumnModel().getColumn(4).setHeaderValue(lingua_corrente.getString("NascitaLabel")); //data nascita 
    } 
    hatchlistijTable.getColumnModel().getColumn(4).setResizable(false); 
    hatchlistijTable.getColumnModel().getColumn(4).setPreferredWidth(150); 
    hatchlistijTable.setRowHeight(25); 
    //hatchlistijTable.getColumnModel().getColumn(5).setHeaderValue("Jump"); //salto 
    //hatchlistijTable.getColumnModel().getColumn(5).setResizable(false); 
    //hatchlistijTable.getColumnModel().getColumn(5).setPreferredWidth(50); 
    for (int i=hatchlistijTable.getRowCount()-1;i>=0;i--) 
     ((javax.swing.table.DefaultTableModel) hatchlistijTable.getModel()).removeRow(i); 
    String qDep = "SELECT d FROM Deposizioni d WHERE d.fecondo=" + '"' + 'S' +'"' +" AND d.morto=" + '"' + 'N' +'"' + " AND d.dataSchiusa is null ORDER by d.dataDeposizione ASC"; 
    if (!"nascite".equals(stat)) 
     qDep = "SELECT d FROM Deposizioni d WHERE d.morto=" + '"' + 'N' +'"' + " AND d.anello is null" + " AND d.dataSchiusa is not null ORDER by d.dataSchiusa ASC"; 

    List depo = DBgateway.getInstance().Run_query(qDep); 
    System.out.println(depo.size()); 
    //Deposizioni dd = (Deposizioni) DBgateway.getInstance().Run_query(qDep); 
    for (int i=0;i<depo.size();i++){ 
     //Deposizioni dd = (Deposizioni) DBgateway.getInstance().Run_query(qDep).get(i); 
     Deposizioni dd = (Deposizioni) depo.get(i); 
     int toAdd = Program.getConf().getSchiusa(); 
     Calendar cal = Calendar.getInstance(); 
     if ("nascite".equals(stat)){ 
      cal.setTime(dd.getDataDeposizione()); 
     } 
     else { 
      toAdd = Program.getConf().getAnellare(); 
      cal.setTime(dd.getDataSchiusa()); 
     } 
     Calendar today=Calendar.getInstance(); 
     cal.add(Calendar.DATE, toAdd); // add n days 
     //if(today.after(cal)){ 
     System.out.println(toAdd + " " + today.after(cal) +" " + "nascite".equals(stat)); 
     Object [] rowData=getRowData(dd,i, cal,stat); 
     if("nascite".equals(stat)) 
      ((javax.swing.table.DefaultTableModel) hatchlistijTable.getModel()).addRow(rowData); 
     else 
      if(today.after(cal) && !"nascite".equals(stat)) 
       ((javax.swing.table.DefaultTableModel) hatchlistijTable.getModel()).addRow(rowData); 
    } 
    TableCellRenderer buttonRenderer = new JTableButtonRenderer(); 
    hatchlistijTable.getColumn(lingua_corrente.getString("jLabel8")).setCellRenderer(buttonRenderer); 
    hatchlistijTable.addMouseListener(new JTableButtonMousePriListener(hatchlistijTable)); 

    nascitejDialog.setVisible(true); 
} 


private Object[] getRowData(Deposizioni dd,int i, Calendar cal, final String stat) { 
    try { 
     String qCp="SELECT c FROM Coppie c WHERE c.idCoppia=" + findDatiCova(dd.getIdDeposizione()).getIdCoppia(); 
     Coppie rCp=(Coppie) DBgateway.getInstance().Run_query(qCp).get(0); 
     String data = df.format(cal.getTime()); 
     //Bottone salto cova 
     final JButton jump=new JButton(rCp.getGabbia().toString()); 
     jump.addActionListener(new java.awt.event.ActionListener() { 
     private Object classeMain = this.getClass(); 
     @Override 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 
      jumpActionPerformed(evt); 
      } 

     private void jumpActionPerformed(ActionEvent evt) { 
      System.out.println("jump" +jump.getText().toString()); 
      String qS ="SELECT c.idCoppia from Coppie c WHERE c.attiva=" + "'"+"S"+"'" + " AND c.gabbia="+jump.getText().toString(); 
      CoveNew cova = new CoveNew(mainClass, (Integer) DBgateway.getInstance().Run_query(qS).get(0),stat); 
      cova.setVisible(true); 
      nascitejDialog.setVisible(false); 
      mainClass.setVisible(false); 
      } 
      }); 
       // 

       Object [] rowData = {i+1, // progressivogianluca 
        rCp.getNumeroCoppia(), // numero coppia 
        rCp.getAnno(), 
        //rCp.getGabbia(), // fecondo 
        jump, 
        data}; 
     return(rowData); 
    } catch (IOException ex) { 
     Logger.getLogger(Main_menu.class.getName()).log(Level.SEVERE, null, ex); 
    return null; 
    } 
} 


    private static class JTableButtonMousePriListener extends MouseAdapter { 
    private final JTable table; 

    public JTableButtonMousePriListener(JTable table) { 
     this.table = table; 
    } 
     @Override public void mouseClicked(MouseEvent e) { 
      int column = table.getColumnModel().getColumnIndexAtX(e.getX()); 
      int row = e.getY()/table.getRowHeight(); 

      if (row < table.getRowCount() && row >= 0 && column < table.getColumnCount() && column >= 0) { 
       Object value = table.getValueAt(row, column); 
       if (value instanceof JButton) { 
        ((JButton)value).doClick(); 
        //if(((JButton)value).isEnabled()) 
         // anella(row,column); 
       } 
      } 
     } 

    } 

JTable правильно показана проблема, которую я нахожусь что когда я нажимаю на Jbutton в первый раз, новый JFrame отображается один раз, если я нажимаю еще раз, он отображается в 3 раза больше 7 и так далее. Можете ли вы помочь мне показать его только один раз? Спасибо, Gianluca.

+1

Good Read: [Использование нескольких JFrames, хорошая/плохая практика?] (Http://stackoverflow.com/questions/9554636/the-use-of-multiple-jframes-good-bad-practice) –

+0

Также рассмотрите публикацию [a ** Минимальный **, Полный, проверенный и читаемый пример] (http://stackoverflow.com/help/mcve) –

+0

Спасибо за предложение, я буду иметь в виду и попытаюсь следовать, изменив мой кода, но как насчет конкретной проблемы? ;-) –

ответ

2

Вам не следует добавлять JButton в TableModel. JTable использует средства визуализации и редакторы для отображения данных.

См. Table Button Column для подхода, который позволяет хранить текст в столбце, но затем использует собственный редактор/редактор для этого столбца, чтобы он выглядел и действует как кнопка. Все, что вам нужно сделать, это предоставить действие, когда вы нажимаете на ячейку.

+0

Вот что я пробовал, но, похоже, ничего не происходит. –

+0

Он отлично работал для меня. Благодаря!! –

Смежные вопросы