// Exercise17_4.java: Display country's flag and description. // Descriptions are in the file import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; public class Exercise17_4 extends JFrame implements ItemListener { // Declare an array of Strings for flag titles private String[] flagTitle = {"Canada", "China", "Denmark", "France", "Germany", "India", "Norway", "United Kingdom", "United States of America"}; // Declare an ImageIcon array for the national flags of 9 countries private ImageIcon[] flagImage = new ImageIcon[9]; // Declare an array of strings for flag descriptions private String[] flagDescription = new String[9]; // Declare and create a description panel private DescriptionPanel descriptionPanel = new DescriptionPanel(); // The combo list for selecting countries private JComboBox jcbo; // Base directory for the files String baseDirectory; // Main Method public static void main(String[] args) { Exercise17_4 frame = new Exercise17_4(); frame.pack(); frame.setTitle("Exercise 17.4"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } // Default Constructor public Exercise17_4() { // Get base directory baseDirectory = System.getProperty("user.dir"); // Load images info flagImage array flagImage[0] = new ImageIcon(baseDirectory + "/images/ca.gif"); flagImage[1] = new ImageIcon(baseDirectory + "/images/china.gif"); flagImage[2] = new ImageIcon("images/denmark.gif"); flagImage[3] = new ImageIcon("images/fr.gif"); flagImage[4] = new ImageIcon("images/germany.gif"); flagImage[5] = new ImageIcon("images/india.gif"); flagImage[6] = new ImageIcon("images/norway.gif"); flagImage[7] = new ImageIcon("images/uk.gif"); flagImage[8] = new ImageIcon("images/us.gif"); // Set text description for (int i=0; i<9; i++) { flagDescription[i] = getDescription(i); } // Create items into the combo box jcbo = new JComboBox(flagTitle); // Set the first country (Canada) for display setDisplay(0); // Add combo box and description panel to the list getContentPane().add(new JScrollPane(jcbo), BorderLayout.NORTH); getContentPane().add(descriptionPanel, BorderLayout.CENTER); // Register listener jcbo.addItemListener(this); } // Handle item selection public void itemStateChanged(ItemEvent e) { setDisplay(jcbo.getSelectedIndex()); } // Set display information on the description panel public void setDisplay(int index) { descriptionPanel.setTitle(flagTitle[index]); descriptionPanel.setImageIcon(flagImage[index]); descriptionPanel.setTextDescription(flagDescription[index]); } private String getDescription(int i) { String result = new String(); try { BufferedReader in = new BufferedReader(new FileReader( baseDirectory + "/text/description" + i + ".txt")); String line; while ((line = in.readLine()) != null) { result += line + '\n'; } } catch (IOException ex) { System.out.println(ex); } return result; } }