Advertisement
Guest User

table demo

a guest
Jun 23rd, 2016
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.67 KB | None | 0 0
  1. import java.io.*;
  2.  
  3. import java.awt.*;
  4. import java.awt.event.*;
  5. import javax.swing.ImageIcon;
  6. import javax.swing.*;
  7. import javax.swing.event.*;
  8. import javax.swing.table.*;
  9.  
  10. public class Z53JTableDemo extends JFrame {
  11.  
  12. private JPanel topPanel;
  13. private JTable table;
  14. private InteractiveTableModel tableModel;
  15. private JScrollPane scroller;
  16. private JMenuBar mnuBar;
  17. private JMenu mnuFile;
  18. private JMenuItem mnuFileOpen, mnuFileSave;
  19.  
  20. public static final String[] columnNames = {
  21. "Autor", "Tytuł", "Cena", "Okładka", ""
  22. };
  23.  
  24. public Z53JTableDemo() {
  25. setTitle("Z53: JTable Demo");
  26.  
  27. topPanel = new JPanel();
  28. topPanel.setLayout( new BorderLayout() );
  29. getContentPane().add( topPanel );
  30.  
  31. tableModel = new InteractiveTableModel(columnNames);
  32.  
  33. tableModel.addTableModelListener(new TableModelListener() {
  34.  
  35. @Override
  36. public void tableChanged(TableModelEvent e) {
  37. if (e.getType() == TableModelEvent.UPDATE) {
  38. int column = e.getColumn();
  39. int row = e.getFirstRow();
  40. table.setColumnSelectionInterval(column + 1, column + 1);
  41. table.setRowSelectionInterval(row, row);
  42. }
  43. }
  44.  
  45. } );
  46. table = new JTable();
  47. table.setModel(tableModel);
  48. table.setSurrendersFocusOnKeystroke(true);
  49. if (!tableModel.hasEmptyRow()) {
  50. tableModel.addEmptyRow();
  51. }
  52.  
  53. // obsługa usuwania podobnie jak w zadaniu 5.2 - przez kliknięcie myszką z przyciśniętym Alt'em
  54. table.addMouseListener( new MouseAdapter() {
  55.  
  56. @Override
  57. public void mouseClicked(MouseEvent e) {
  58.  
  59. if (
  60. // wymagane wciśnięcie ALT'a
  61. e.isAltDown()
  62.  
  63. // zabezpieczenie przed próbą usuwania z pustej listy lub spoza listy
  64. && table.getSelectedRow() >= 0
  65. )
  66. {
  67.  
  68. tableModel.deleteRowAt(table.getSelectedRow());
  69.  
  70. }
  71. }
  72. });
  73.  
  74. scroller = new javax.swing.JScrollPane(table);
  75. table.setPreferredScrollableViewportSize(new java.awt.Dimension(500, 300));
  76. TableColumn hidden = table.getColumnModel().getColumn(InteractiveTableModel.HIDDEN_INDEX);
  77. hidden.setMinWidth(2);
  78. hidden.setPreferredWidth(2);
  79. hidden.setMaxWidth(2);
  80. hidden.setCellRenderer( new InteractiveRenderer(InteractiveTableModel.HIDDEN_INDEX) );
  81.  
  82.  
  83. mnuBar = new JMenuBar();
  84. mnuFile = new JMenu("Plik");
  85. mnuFile.setMnemonic(KeyEvent.VK_P);
  86. mnuFileOpen = new JMenuItem("Otwórz");
  87. mnuFileOpen.addActionListener( new ActionListener() {
  88.  
  89. @Override
  90. public void actionPerformed(ActionEvent e) {
  91.  
  92. JFileChooser fileDialog = new JFileChooser(System.getProperty("user.dir"));
  93.  
  94. int returnVal = fileDialog.showOpenDialog((Component) e.getSource());
  95. File file=null;
  96. if (returnVal == JFileChooser.APPROVE_OPTION) {
  97. file = fileDialog.getSelectedFile();
  98.  
  99. tableModel.deleteAllRows();
  100.  
  101. try {
  102. BufferedReader in = new BufferedReader(new FileReader(file));
  103. String line = in.readLine();
  104. while(line != null) {
  105. String[] listStr = line.split("\\|");
  106. tableModel.addRow(new Book(listStr[0], listStr[1], Double.parseDouble(listStr[2]), listStr[3]));
  107. line = in.readLine();
  108. }
  109. } catch (FileNotFoundException e1) {
  110. // TODO Auto-generated catch block
  111. e1.printStackTrace();
  112. } catch (IOException e1) {
  113. // TODO Auto-generated catch block
  114. e1.printStackTrace();
  115. }
  116.  
  117. tableModel.deleteRowAt(0);
  118. tableModel.addEmptyRow();
  119. }
  120.  
  121. }});
  122. mnuFileOpen.setMnemonic(KeyEvent.VK_O);
  123. mnuFileSave = new JMenuItem("Zapisz jako");
  124. mnuFileSave.setMnemonic(KeyEvent.VK_Z);
  125. mnuFileSave.addActionListener( new ActionListener() {
  126.  
  127. @Override
  128. public void actionPerformed(ActionEvent e) {
  129. JFileChooser fileDialog = new JFileChooser(System.getProperty("user.dir"));
  130.  
  131. int retVal = fileDialog.showSaveDialog((Component) e.getSource());
  132. File fileToSave=null;
  133. if (retVal == JFileChooser.APPROVE_OPTION) {
  134. fileToSave = fileDialog.getSelectedFile();
  135. }
  136.  
  137. try {
  138. if (fileToSave == null) {
  139. return;
  140. }
  141. BufferedWriter outFile = new BufferedWriter(new FileWriter(fileToSave));
  142. for(int a=0; a<tableModel.getRowCount()-1; a++) {
  143. outFile.write(
  144. tableModel.getValueAt(a, InteractiveTableModel.AUTHOR_INDEX)+"|"+
  145. tableModel.getValueAt(a, InteractiveTableModel.TITLE_INDEX)+"|"+
  146. tableModel.getValueAt(a, InteractiveTableModel.PRICE_INDEX)+"|"+
  147. tableModel.getValueAt(a, InteractiveTableModel.IMAGE_INDEX)+"\n"
  148. );
  149. }
  150.  
  151. outFile.close();
  152. setTitle(fileToSave.getName());
  153. } catch (IOException ex) {
  154. ex.printStackTrace();
  155. }
  156.  
  157. }
  158.  
  159. });
  160.  
  161.  
  162. mnuBar.add(mnuFile);
  163. mnuFile.add(mnuFileOpen);
  164. mnuFile.add(mnuFileSave);
  165. mnuFile.addSeparator();
  166.  
  167.  
  168. setLayout(new BorderLayout());
  169. add(scroller, BorderLayout.CENTER);
  170. add(mnuBar, BorderLayout.NORTH);
  171. }
  172.  
  173. public void highlightLastRow(int row) {
  174. int lastrow = tableModel.getRowCount();
  175. if (row == lastrow - 1) {
  176. table.setRowSelectionInterval(lastrow - 1, lastrow - 1);
  177. } else {
  178. table.setRowSelectionInterval(row + 1, row + 1);
  179. }
  180.  
  181. table.setColumnSelectionInterval(0, 0);
  182. }
  183.  
  184. class InteractiveRenderer extends DefaultTableCellRenderer {
  185.  
  186. protected int interactiveColumn;
  187.  
  188. public InteractiveRenderer(int interactiveColumn) {
  189. this.interactiveColumn = interactiveColumn;
  190. }
  191.  
  192. public Component getTableCellRendererComponent(JTable table,
  193. Object value, boolean isSelected, boolean hasFocus, int row,
  194. int column)
  195. {
  196. Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
  197. if (column == interactiveColumn && hasFocus) {
  198. if ((Z53JTableDemo.this.tableModel.getRowCount() - 1) == row &&
  199. !Z53JTableDemo.this.tableModel.hasEmptyRow())
  200. {
  201. Z53JTableDemo.this.tableModel.addEmptyRow();
  202. }
  203.  
  204. highlightLastRow(row);
  205. }
  206.  
  207. return c;
  208. }
  209. }
  210. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement