YauhenMardan

Untitled

Feb 26th, 2019
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.47 KB | None | 0 0
  1. package com.company;
  2.  
  3. import javax.imageio.ImageIO;
  4. import javax.swing.*;
  5. import javax.swing.table.DefaultTableCellRenderer;
  6. import javax.swing.table.DefaultTableColumnModel;
  7. import javax.swing.table.DefaultTableModel;
  8. import javax.swing.table.TableModel;
  9. import java.awt.*;
  10. import java.io.File;
  11. import java.util.*;
  12.  
  13. public class WindowApp extends JFrame {
  14.  
  15. public static final int SCREEN_WIDTH=800;
  16. public static final int SCREEN_HEIGHT=500;
  17. JPanel mainPanel1;
  18. JPanel mainPanel2;
  19. JScrollPane scrollPane;
  20. JList countriesList;
  21. JTable table1;
  22. JTabbedPane tabbedPane;
  23. //data
  24. public static final String flagsFolderName="plain";
  25. public static final String capitalsFileName="capitals.txt";
  26. public static final Object[] table1Header = new String[]{"Flag","Description","Price","Choose"};
  27. public static HashMap<String, ImageIcon> countriesAndFlagsMap;
  28. public static HashMap<String, String> countriesAndCapitalsMap;
  29. public static HashMap<String, String> countryAndDescriptionMap;
  30. public static HashMap<String, Integer> countryAndPriceMap;
  31.  
  32. WindowApp(){
  33. //data
  34. readFlags(flagsFolderName);
  35. readCapitals(capitalsFileName);
  36. readDescription();
  37. readPrice();
  38. //tabbed pane
  39. tabbedPane=new JTabbedPane();
  40. initFirstTab();
  41. initSecondTab();
  42. //window
  43. setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  44. setResizable(false);
  45. setContentPane(tabbedPane);
  46. pack();
  47. }
  48. public void initFirstTab(){
  49. //main panel
  50. mainPanel1 =new JPanel();
  51. mainPanel1.setLayout(new BorderLayout());
  52. countriesList=new JList(countriesAndFlagsMap.keySet().toArray());
  53. countriesList.setCellRenderer(new FlagsListRenderer());
  54. //scroll pane
  55. scrollPane=new JScrollPane(countriesList);
  56. mainPanel1.add(scrollPane, BorderLayout.CENTER);
  57. scrollPane.setPreferredSize(new Dimension(SCREEN_WIDTH,SCREEN_HEIGHT));
  58. //
  59. tabbedPane.add(mainPanel1);
  60. }
  61. public void initSecondTab(){
  62. //main panel
  63. mainPanel2=new JPanel();
  64. mainPanel2.setLayout(new BorderLayout());
  65. //table
  66. table1=new JTable();//4,countriesAndFlagsMap.values().size());
  67. table1.setFillsViewportHeight(true);
  68. table1.setModel(toTableModel(countriesAndCapitalsMap));
  69. table1.getColumnModel().getColumn(0).setCellRenderer(new FlagsTableCellRenderer());
  70. mainPanel2.add(table1);
  71. //
  72. tabbedPane.add(mainPanel2);
  73. }
  74. public TableModel toTableModel(HashMap<?,?> map){
  75. DefaultTableModel model = new DefaultTableModel(new Object[] {"Key", "Value"},0);
  76. for(HashMap.Entry<?,?> entry : map.entrySet()){
  77. model.addRow(new Object[]{entry.getKey(),entry.getValue()});
  78. }
  79. return model;
  80. }
  81. public void readPrice(){
  82. countryAndPriceMap=new HashMap<>();
  83. countryAndPriceMap.put("Belarus ",100);
  84. countryAndPriceMap.put("Germany ",500);
  85. countryAndPriceMap.put("Netherlands ",600);
  86. }
  87. public void readDescription(){
  88. countryAndDescriptionMap=new HashMap<>();
  89. countryAndDescriptionMap.put("Belarus ","Back to USSR");
  90. countryAndDescriptionMap.put("Germany ","Nazi");
  91. countryAndDescriptionMap.put("Netherlands ","Weed");
  92. }
  93. public void readCapitals(String capitalsFileName){
  94. countriesAndCapitalsMap=new HashMap<>();
  95. countriesAndCapitalsMap.put("Belarus ","Minsk");
  96. countriesAndCapitalsMap.put("Germany ","Berlin");
  97. countriesAndCapitalsMap.put("Netherlands ","Amsterdam");
  98. // try (Stream<String> stream = Files.lines(Paths.get(capitalsFileName))) {
  99. // stream.forEach((l)->{
  100. // int i=l.indexOf("--");
  101. // countriesAndCapitalsMap.put(l.substring(0,i)+" ",l.substring(i+2));
  102. // });
  103. // }
  104. // catch (IOException e){
  105. //
  106. // }
  107. }
  108. public void readFlags(String folderName){
  109. File folder=new File(folderName);
  110. countriesAndFlagsMap =new HashMap<>();
  111. for(File file : folder.listFiles()){
  112. String countryName=file.getName();
  113. countryName=parseCountryName(countryName);
  114. countriesAndFlagsMap.put(countryName, createImageIcon(file.getPath(),countryName));
  115. }
  116. }
  117. protected ImageIcon createImageIcon(String path,
  118. String description) {
  119. java.net.URL imgURL = getClass().getResource(path);
  120. if (imgURL != null) {
  121. return new ImageIcon(imgURL, description);
  122. } else {
  123. System.err.println("Couldn't find file: " + path);
  124. return null;
  125. }
  126. }
  127. public String parseCountryName(String countryName){
  128. String countryNameParsed=countryName.substring(5,countryName.length()-4);
  129. StringBuffer contryNameBuffer=new StringBuffer();
  130. StringTokenizer tokenizer=new StringTokenizer(countryNameParsed,"_");
  131. String upperCaseString;
  132. while(tokenizer.hasMoreElements()){
  133. upperCaseString=tokenizer.nextElement().toString();
  134. upperCaseString=upperCaseString.substring(0,1).toUpperCase()+upperCaseString.substring(1);
  135. contryNameBuffer.append(upperCaseString);
  136. contryNameBuffer.append(" ");
  137. }
  138. return contryNameBuffer.toString();
  139. }
  140. public class FlagsTableCellRenderer extends DefaultTableCellRenderer{
  141. public Component getTableCellRendererComponent(JTable table,
  142. Object value,
  143. boolean isSelected,
  144. boolean hasFocus,
  145. int row,
  146. int column){
  147. JLabel label = (JLabel) super.getTableCellRendererComponent(
  148. table,
  149. value,
  150. isSelected,
  151. hasFocus,
  152. row,
  153. column);
  154. label.setSize(new Dimension(100,100));
  155. label.setIcon(countriesAndFlagsMap.get((String)value));
  156. return label;
  157. }
  158. }
  159. public class FlagsListRenderer extends DefaultListCellRenderer {
  160.  
  161. Font font = new Font("helvitica", Font.BOLD, 24);
  162.  
  163. @Override
  164. public Component getListCellRendererComponent(
  165. JList list,
  166. Object value,
  167. int index,
  168. boolean isSelected,
  169. boolean cellHasFocus) {
  170. JLabel label = (JLabel) super.getListCellRendererComponent(
  171. list,
  172. value,
  173. index,
  174. isSelected,
  175. cellHasFocus);
  176. if(isSelected) {
  177. String capitalName=countriesAndCapitalsMap.get((String) value);
  178. if(capitalName!=null) {
  179. label.setText(value + capitalName);
  180. }else{
  181. label.setText(value+" No data about capital");
  182. }
  183. }
  184. label.setIcon(countriesAndFlagsMap.get((String)value));
  185. label.setHorizontalTextPosition(JLabel.RIGHT);
  186. label.setFont(font);
  187. return label;
  188. }
  189. }
  190. }
Advertisement
Add Comment
Please, Sign In to add comment