YauhenMardan

Untitled

Feb 22nd, 2019
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.17 KB | None | 0 0
  1. package com.company;
  2.  
  3. import javafx.util.Pair;
  4.  
  5. import javax.swing.*;
  6. import java.awt.*;
  7. import java.io.File;
  8. import java.util.*;
  9.  
  10. public class WindowApp extends JFrame {
  11.  
  12. public static final int SCREEN_WIDTH=800;
  13. public static final int SCREEN_HEIGHT=500;
  14. JPanel mainPanel1;
  15. JPanel mainPanel2;
  16. JScrollPane scrollPane;
  17. JList countriesList;
  18. JTabbedPane tabbedPane;
  19. //data
  20. public static final String flagsFolderName="plain";
  21. public static final String capitalsFileName="capitals.txt";
  22. public static HashMap<String, ImageIcon> countriesAndFlagsMap;
  23. public static HashMap<String, String> countriesAndCapitalsMap;
  24.  
  25. public static HashMap<String, Pair<String,ImageIcon>> countriesMap;
  26.  
  27. WindowApp(){
  28. //data
  29. readData(flagsFolderName, capitalsFileName);
  30. //tabbed pane
  31. tabbedPane=new JTabbedPane();
  32. initFirstTab();
  33. initSecondTab();
  34. //window
  35. setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  36. setResizable(false);
  37. setContentPane(tabbedPane);
  38. pack();
  39. }
  40. public void initFirstTab(){
  41. //main panel
  42. mainPanel1 =new JPanel();
  43. mainPanel1.setLayout(new BorderLayout());
  44. countriesList=new JList(countriesAndFlagsMap.keySet().toArray());
  45. countriesList.setCellRenderer(new FlagsListRenderer());
  46. //scroll pane
  47. scrollPane=new JScrollPane(countriesList);
  48. mainPanel1.add(scrollPane, BorderLayout.CENTER);
  49. scrollPane.setPreferredSize(new Dimension(SCREEN_WIDTH,SCREEN_HEIGHT));
  50. //
  51. tabbedPane.add(mainPanel1);
  52. }
  53. public void initSecondTab(){
  54. //main panel
  55. mainPanel2=new JPanel();
  56. mainPanel2.setLayout(new BorderLayout());
  57. //
  58. tabbedPane.add(mainPanel2);
  59. }
  60. public void readData(String flagsFolderName,String capitalsFileName){
  61. readFlags(flagsFolderName);
  62. readCapitals(capitalsFileName);
  63. }
  64. public void readCapitals(String capitalsFileName){
  65. countriesAndCapitalsMap=new HashMap<>();
  66. countriesAndCapitalsMap.put("Belarus ","Minsk");
  67. countriesAndCapitalsMap.put("Germany ","Berlin");
  68. countriesAndCapitalsMap.put("Netherlands ","Amsterdam");
  69. // try (Stream<String> stream = Files.lines(Paths.get(capitalsFileName))) {
  70. // stream.forEach((l)->{
  71. // int i=l.indexOf("--");
  72. // countriesAndCapitalsMap.put(l.substring(0,i)+" ",l.substring(i+2));
  73. // });
  74. // }
  75. // catch (IOException e){
  76. //
  77. // }
  78. }
  79. public void readFlags(String folderName){
  80. File folder=new File(folderName);
  81. countriesAndFlagsMap =new HashMap<>();
  82. for(File file : folder.listFiles()){
  83. String countryName=file.getName();
  84. countryName=parseCountryName(countryName);
  85. countriesAndFlagsMap.put(countryName, createImageIcon(file.getPath(),countryName));
  86. }
  87. }
  88. protected ImageIcon createImageIcon(String path,
  89. String description) {
  90. java.net.URL imgURL = getClass().getResource(path);
  91. if (imgURL != null) {
  92. return new ImageIcon(imgURL, description);
  93. } else {
  94. System.err.println("Couldn't find file: " + path);
  95. return null;
  96. }
  97. }
  98. public String parseCountryName(String countryName){
  99. String countryNameParsed=countryName.substring(5,countryName.length()-4);
  100. StringBuffer contryNameBuffer=new StringBuffer();
  101. StringTokenizer tokenizer=new StringTokenizer(countryNameParsed,"_");
  102. String upperCaseString;
  103. while(tokenizer.hasMoreElements()){
  104. upperCaseString=tokenizer.nextElement().toString();
  105. upperCaseString=upperCaseString.substring(0,1).toUpperCase()+upperCaseString.substring(1);
  106. contryNameBuffer.append(upperCaseString);
  107. contryNameBuffer.append(" ");
  108. }
  109. return contryNameBuffer.toString();
  110. }
  111. public class FlagsListRenderer extends DefaultListCellRenderer {
  112.  
  113. Font font = new Font("helvitica", Font.BOLD, 24);
  114.  
  115. @Override
  116. public Component getListCellRendererComponent(
  117. JList list,
  118. Object value,
  119. int index,
  120. boolean isSelected,
  121. boolean cellHasFocus) {
  122. JLabel label = (JLabel) super.getListCellRendererComponent(
  123. list,
  124. value,
  125. index,
  126. isSelected,
  127. cellHasFocus);
  128. if(isSelected) {
  129. String capitalName=countriesAndCapitalsMap.get((String) value);
  130. if(capitalName!=null) {
  131. label.setText(value + capitalName);
  132. }else{
  133. label.setText(value+" No data about capital");
  134. }
  135. }
  136. label.setIcon(countriesAndFlagsMap.get((String)value));
  137. label.setHorizontalTextPosition(JLabel.RIGHT);
  138. label.setFont(font);
  139. return label;
  140. }
  141. }
  142. }
Advertisement
Add Comment
Please, Sign In to add comment