Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.company;
- import javafx.util.Pair;
- import javax.swing.*;
- import java.awt.*;
- import java.io.File;
- import java.util.*;
- public class WindowApp extends JFrame {
- public static final int SCREEN_WIDTH=800;
- public static final int SCREEN_HEIGHT=500;
- JPanel mainPanel1;
- JPanel mainPanel2;
- JScrollPane scrollPane;
- JList countriesList;
- JTabbedPane tabbedPane;
- //data
- public static final String flagsFolderName="plain";
- public static final String capitalsFileName="capitals.txt";
- public static HashMap<String, ImageIcon> countriesAndFlagsMap;
- public static HashMap<String, String> countriesAndCapitalsMap;
- public static HashMap<String, Pair<String,ImageIcon>> countriesMap;
- WindowApp(){
- //data
- readData(flagsFolderName, capitalsFileName);
- //tabbed pane
- tabbedPane=new JTabbedPane();
- initFirstTab();
- initSecondTab();
- //window
- setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
- setResizable(false);
- setContentPane(tabbedPane);
- pack();
- }
- public void initFirstTab(){
- //main panel
- mainPanel1 =new JPanel();
- mainPanel1.setLayout(new BorderLayout());
- countriesList=new JList(countriesAndFlagsMap.keySet().toArray());
- countriesList.setCellRenderer(new FlagsListRenderer());
- //scroll pane
- scrollPane=new JScrollPane(countriesList);
- mainPanel1.add(scrollPane, BorderLayout.CENTER);
- scrollPane.setPreferredSize(new Dimension(SCREEN_WIDTH,SCREEN_HEIGHT));
- //
- tabbedPane.add(mainPanel1);
- }
- public void initSecondTab(){
- //main panel
- mainPanel2=new JPanel();
- mainPanel2.setLayout(new BorderLayout());
- //
- tabbedPane.add(mainPanel2);
- }
- public void readData(String flagsFolderName,String capitalsFileName){
- readFlags(flagsFolderName);
- readCapitals(capitalsFileName);
- }
- public void readCapitals(String capitalsFileName){
- countriesAndCapitalsMap=new HashMap<>();
- countriesAndCapitalsMap.put("Belarus ","Minsk");
- countriesAndCapitalsMap.put("Germany ","Berlin");
- countriesAndCapitalsMap.put("Netherlands ","Amsterdam");
- // try (Stream<String> stream = Files.lines(Paths.get(capitalsFileName))) {
- // stream.forEach((l)->{
- // int i=l.indexOf("--");
- // countriesAndCapitalsMap.put(l.substring(0,i)+" ",l.substring(i+2));
- // });
- // }
- // catch (IOException e){
- //
- // }
- }
- public void readFlags(String folderName){
- File folder=new File(folderName);
- countriesAndFlagsMap =new HashMap<>();
- for(File file : folder.listFiles()){
- String countryName=file.getName();
- countryName=parseCountryName(countryName);
- countriesAndFlagsMap.put(countryName, createImageIcon(file.getPath(),countryName));
- }
- }
- protected ImageIcon createImageIcon(String path,
- String description) {
- java.net.URL imgURL = getClass().getResource(path);
- if (imgURL != null) {
- return new ImageIcon(imgURL, description);
- } else {
- System.err.println("Couldn't find file: " + path);
- return null;
- }
- }
- public String parseCountryName(String countryName){
- String countryNameParsed=countryName.substring(5,countryName.length()-4);
- StringBuffer contryNameBuffer=new StringBuffer();
- StringTokenizer tokenizer=new StringTokenizer(countryNameParsed,"_");
- String upperCaseString;
- while(tokenizer.hasMoreElements()){
- upperCaseString=tokenizer.nextElement().toString();
- upperCaseString=upperCaseString.substring(0,1).toUpperCase()+upperCaseString.substring(1);
- contryNameBuffer.append(upperCaseString);
- contryNameBuffer.append(" ");
- }
- return contryNameBuffer.toString();
- }
- public class FlagsListRenderer extends DefaultListCellRenderer {
- Font font = new Font("helvitica", Font.BOLD, 24);
- @Override
- public Component getListCellRendererComponent(
- JList list,
- Object value,
- int index,
- boolean isSelected,
- boolean cellHasFocus) {
- JLabel label = (JLabel) super.getListCellRendererComponent(
- list,
- value,
- index,
- isSelected,
- cellHasFocus);
- if(isSelected) {
- String capitalName=countriesAndCapitalsMap.get((String) value);
- if(capitalName!=null) {
- label.setText(value + capitalName);
- }else{
- label.setText(value+" No data about capital");
- }
- }
- label.setIcon(countriesAndFlagsMap.get((String)value));
- label.setHorizontalTextPosition(JLabel.RIGHT);
- label.setFont(font);
- return label;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment