Então, estou com uma ideia aqui. No caso é:
Venda de tempo para uma loja que tem video games etc
Vou descrever o Form, ele vai fazer uma “venda” de tempo, ele escolhe o aparelho e digita num campo jtf o tempo em minutos que a pessoa ficará.
Quando salvar a venda do tempo, ela vai pra Jtable e fica verde a linha enquanto o tempo não está zerado.
As dúvidas são: teria como por em uma coluna um timer? Ou simplesmente, quando terminar o tempo, a linha ficar vermelha e abrir uma mensagem?
**Pensei em fazer um cálculo em segundos, convertendo o minuto digitado em segundos e criando um evento para abrir um JOptionPane assim que terminar esses segundos, avisando que o Aparelho de nº X terminou o tempo de utilização. E ao fechar esse JOptionPane, a linha seria excluída desta jtable
Confesso que fiquei perdido, sou iniciante e não consegui por em pratica. Teria como explicar melhor?
rodriguesabner
O que exatamente não deu certo? Lá tem o fonte já funcionando: (Código extraído do site)
importjava.awt.BorderLayout;importjava.awt.Color;importjava.awt.Component;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.JScrollPane;importjavax.swing.JTable;importjavax.swing.SwingUtilities;importjavax.swing.table.DefaultTableCellRenderer;importjavax.swing.table.DefaultTableModel;publicclassTimer{staticclassCustomRendererextendsDefaultTableCellRenderer{@SuppressWarnings("compatibility:-3065188367147843914")privatestaticfinallongserialVersionUID=1L;@OverridepublicComponentgetTableCellRendererComponent(JTabletable,Objectvalue,booleanisSelected,booleanhasFocus,introw,intcolumn){ComponentcellComponent=super.getTableCellRendererComponent(table,value,isSelected,hasFocus,row,column);Stringtime=(String)table.getValueAt(row,column);if(time!=null&&time.compareTo("00:05:00")<=0){cellComponent.setBackground(Color.RED);}else{cellComponent.setBackground(Color.WHITE);}returncellComponent;}}classPassTimeextendsThread{privateintinitialSeconds;privatefinalintrow;privatefinalintcolumn;publicPassTime(introw,intcolumn,intinitialSeconds){this.initialSeconds=initialSeconds;this.row=row;this.column=column;}@Override@SuppressWarnings("SleepWhileInLoop")publicvoidrun(){while(initialSeconds>=0){//while we can countdowntry{//set the new value in the row/column position in the matrix((DefaultTableModel)table.getModel()).setValueAt(getTime(initialSeconds),row,column);//let the table know it's data has been modified((DefaultTableModel)table.getModel()).fireTableDataChanged();Thread.sleep(1000);//wait 1 secondinitialSeconds--;//decrement seconds by 1}catch(InterruptedExceptione){System.out.println(e.getMessage());}}}}publicvoidPassTheTime(introw,intcolumn,inttime){PassTimetimer=newPassTime(row,column,time);timer.start();}staticObject[]columnNames=newObject[]{"Time 1","Time 2"};//table headerstaticString[][]rowData=newString[2][2];//only a 2 by 2 matrix in this exampleprivatefinalJPanelmainPanel=newJPanel();privatefinalDefaultTableModeltableModel;privatefinalJTabletable;//method to get time from seconds as hh:mm:sspublicstaticStringgetTime(inttotalSecs){inthours=totalSecs/3600;intminutes=(totalSecs%3600)/60;intseconds=totalSecs%60;StringtimeString=String.format("%02d:%02d:%02d",hours,minutes,seconds);returntimeString;}publicTimer(){tableModel=newDefaultTableModel(rowData,columnNames);table=newJTable(tableModel);intcolumnCount=table.getColumnModel().getColumnCount();for(inti=0;i<columnCount;i++){table.getColumnModel().getColumn(i).setCellRenderer(newCustomRenderer());}mainPanel.setLayout(newBorderLayout());mainPanel.add(newJScrollPane(table),BorderLayout.CENTER);}publicJPanelgetMainPanel(){returnmainPanel;}privatestaticvoidcreateAndShowGui(){finalTimertimer=newTimer();JFrameframe=newJFrame("Timer");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.getContentPane().add(timer.getMainPanel());frame.pack();frame.setSize(200,200);frame.setLocationByPlatform(true);frame.setVisible(true);frame.addWindowListener(newWindowAdapter(){@OverridepublicvoidwindowOpened(WindowEvente){//start each timer//pass row,column position in the matrix for each Time and the seconds valuetimer.PassTheTime(0,0,302);timer.PassTheTime(0,1,320);timer.PassTheTime(1,0,310);timer.PassTheTime(1,1,420);}});}publicstaticvoidmain(String[]args){SwingUtilities.invokeLater(newRunnable(){@Overridepublicvoidrun(){createAndShowGui();}});}}
Maycondqs
Estou utilizando o NetBeans, no caso eu já criei um jform com todos os elementos. Esse timer, eu vou criar uma nova classe? Não compreendi.
rodriguesabner
Vc tá usando defaultTableModel ou Abstract?
Maycondqs
DefaultTableModel
rodriguesabner
Se você quiser criar uma classe pra cada coisa, vai do seu critério. Agora você pode colocar tudo em uma só, no seu JFrame, tirando o método: createAndShowGui.
E o cara do código usou o método: pass the time pra passar os dados da coluna
//start each timer//pass row,column position in the matrix for each Time and the seconds valuetimer.PassTheTime(0,1,320);