Program tersebut terkait dengan pemformatan teks. Anda dapat mengubah warna teks dan latar, memilih jenis dan model huruf serta mengubah teks yang ditampilkan. Di contoh program kali ini, juga memperkenalkan kombinasi penanganan event menggunakan inner class (baca artikel Inner Class Sebagai Obyek Pendengar Aksi (Event Listener Object) Di Java) serta anonymous inner class (baca artikel Anonymous Inner Class Sebagai Obyek Pendengar Event Di Java) sebagai listener. Berikut ini adalah kode program dan hasil eksekusinya:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 | // Nama file : TextApplication.java // Membuat program aplikasi teks sederhana. // Mengimpor kelas import java.awt.*; import java.awt.event.*; import javax.swing.*; // Deklarasi kelas public class TextApplication extends JFrame { private JLabel label; private int style; private JCheckBoxMenuItem fontStyle[]; private JRadioButtonMenuItem fontFace[], foregroundColor[], backgroundColor[]; private Color backgroundColorValue[] = {Color.YELLOW, Color.WHITE, Color.CYAN}; private Color foregroundColorValue[] = {Color.BLACK, Color.BLUE, Color.RED}; private ButtonGroup groupFontFace, groupForegroundColor, groupBackgroundColor; // Konstruktor tanpa argumen public TextApplication() { label = new JLabel("Pemrograman Java", SwingConstants.CENTER); label.setForeground(Color.BLACK); label.setFont(new Font("Tahoma", Font.PLAIN, 32)); getContentPane().setBackground(Color.YELLOW); getContentPane().add(label, BorderLayout.CENTER); JMenuBar mnuBar = new JMenuBar(); setJMenuBar(mnuBar); JMenu mnuFile = new JMenu("File"); mnuFile.setMnemonic('F'); mnuBar.add(mnuFile); JMenu mnuFormat = new JMenu("Format"); mnuFormat.setMnemonic('o'); mnuBar.add(mnuFormat); JMenu mnuHelp = new JMenu("Help"); mnuHelp.setMnemonic('H'); mnuBar.add(mnuHelp); JMenuItem mnuiNewText = new JMenuItem("New Text"); mnuiNewText.setMnemonic('T'); mnuiNewText.setAccelerator(KeyStroke.getKeyStroke (KeyEvent.VK_T, ActionEvent.CTRL_MASK)); mnuFile.add(mnuiNewText); mnuiNewText.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent ae) { String newText = JOptionPane.showInputDialog(TextApplication.this, "Enter a new text", "New Text Dialog Box", JOptionPane.PLAIN_MESSAGE); label.setText((newText == null) ? label.getText() : newText); } } ); JMenuItem mnuiExit = new JMenuItem("Exit"); mnuiExit.setMnemonic('E'); mnuiExit.setAccelerator(KeyStroke.getKeyStroke (KeyEvent.VK_E, ActionEvent.CTRL_MASK)); mnuFile.add(mnuiExit); mnuiExit.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent ae) { System.exit(0); } } ); JMenuItem mnuiAbout = new JMenuItem("About"); mnuiAbout.setMnemonic('A'); mnuiAbout.setAccelerator(KeyStroke.getKeyStroke (KeyEvent.VK_A, ActionEvent.CTRL_MASK)); mnuHelp.add(mnuiAbout); mnuiAbout.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent ae) { JOptionPane.showMessageDialog(TextApplication.this, "This simple application is about manipulating text.", "About", JOptionPane.PLAIN_MESSAGE); } } ); // Font face menu item RadioButtonHandler radioButtonHandler = new RadioButtonHandler(); JMenu mnuFontFace = new JMenu("Font Face"); mnuFontFace.setMnemonic('c'); mnuFormat.add(mnuFontFace); groupFontFace = new ButtonGroup(); String fontFaceValue[] = {"Monospaced", "SansSerif", "Tahoma", "Verdana"}; fontFace = new JRadioButtonMenuItem[fontFaceValue.length]; for (int x = 0; x < fontFace.length; x++) { fontFace[x] = new JRadioButtonMenuItem(fontFaceValue[x]); mnuFontFace.add(fontFace[x]); groupFontFace.add(fontFace[x]); fontFace[x].addActionListener(radioButtonHandler); } fontFace[2].setSelected(true); // Font style menu item CheckBoxHandler checkBoxHandler = new CheckBoxHandler(); JMenu mnuFontStyle = new JMenu("Font Style"); mnuFontStyle.setMnemonic('S'); mnuFormat.add(mnuFontStyle); String fontStyleValue[] = {"Bold", "Italic"}; fontStyle = new JCheckBoxMenuItem[fontStyleValue.length]; for (int x = 0; x < fontStyle.length; x++) { fontStyle[x] = new JCheckBoxMenuItem(fontStyleValue[x]); mnuFontStyle.add(fontStyle[x]); fontStyle[x].addItemListener(checkBoxHandler); } mnuFormat.addSeparator(); // Foreground color menu item JMenu mnuForegroundColor = new JMenu("Foreground Color"); mnuForegroundColor.setMnemonic('g'); mnuFormat.add(mnuForegroundColor); groupForegroundColor = new ButtonGroup(); String foregroundColorName[] = {"Black", "Blue", "Red"}; foregroundColor = new JRadioButtonMenuItem[foregroundColorName.length]; for (int x = 0; x < foregroundColor.length; x++) { foregroundColor[x] = new JRadioButtonMenuItem(foregroundColorName[x]); mnuForegroundColor.add(foregroundColor[x]); groupForegroundColor.add(foregroundColor[x]); foregroundColor[x].addActionListener(radioButtonHandler); } foregroundColor[0].setSelected(true); // Background color menu item JMenu mnuBackgroundColor = new JMenu("Background Color"); mnuBackgroundColor.setMnemonic('B'); mnuFormat.add(mnuBackgroundColor); groupBackgroundColor = new ButtonGroup(); String backgroundColorName[] = {"Yellow", "White", "Cyan"}; backgroundColor = new JRadioButtonMenuItem[backgroundColorName.length]; for (int x = 0; x < backgroundColor.length; x++) { backgroundColor[x] = new JRadioButtonMenuItem(backgroundColorName[x]); mnuBackgroundColor.add(backgroundColor[x]); groupBackgroundColor.add(backgroundColor[x]); backgroundColor[x].addActionListener(radioButtonHandler); } backgroundColor[0].setSelected(true); } // Akhir blok konstruktor class RadioButtonHandler implements ActionListener { public void actionPerformed(ActionEvent ae) { for (int y = 0; y < fontFace.length; y++) { if (ae.getSource() == fontFace[y]) { label.setFont(new Font(fontFace[y].getText(), style, 32)); break; } } for (int y = 0; y < foregroundColor.length; y++) { if (foregroundColor[y].isSelected()) { label.setForeground(foregroundColorValue[y]); break; } } for (int y = 0; y < backgroundColor.length; y++) { if (backgroundColor[y].isSelected()) { getContentPane().setBackground(backgroundColorValue[y]); break; } } repaint(); } } class CheckBoxHandler implements ItemListener { public void itemStateChanged(ItemEvent ie) { style = 0; if (fontStyle[0].isSelected()) style += Font.BOLD; if (fontStyle[1].isSelected()) style += Font.ITALIC; label.setFont(new Font(label.getFont().getName(), style, 32)); repaint(); } } // Metoda main public static void main(String[] args) { TextApplication frame = new TextApplication(); frame.setTitle("Kelas TextApplication"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(375, 200); frame.setVisible(true); } } |
Kode program di atas memiliki hanya satu konstruktor tanpa argument yang digunakan untuk mendesain user interface dan meregistrasi beberapa item menu yang bila dieksekusi akan memicu event. Di dalam kontruktor tersebut, tiga buah menu yaitu File, Format dan Help diletakkan di menu bar.
Menu file mempunyai dua item menu yaitu New Text dan Exit. Menu Format mempunyai empat submenu yaitu Font Face, Font Style, Foreground Color dan Background Color. Submenu Font Face mempunyai empat item menu yang mewakili jenis huruf yaitu Monospaced, SansSerif, Tahoma dan Verdana. Item menu tersebut merupakan obyek (instan) kelas JRadioButtonmenuItem.
Submenu Font Style mempunyai dua obyek item menu dari kelas JCheckBoxMenuItem yaitu Bold dan Italic. Submenu Foreground Color mempunyai tiga obyek item menu dari kelas JRadioButtonMenuItem yaitu Black, Blue dan Red. Submenu Background Color juga mempunyai tiga item menu yaitu Yellow, White dan Cyan yang juga obyek (instan) dari kelas JRadioButtonMenuItem. Menu Help mempunyai satu menu item yaitu About.
Item menu New Text dan About menampilkan kotak dialog ketika dieksekusi. Item menu New Text menampilkan kotak dialog input untuk memasukkan teks baru yang akan ditampilkan dan item menu About menampilkan kotak dialok yang berisi informasi fungsi aplikasi. Kedua kotak dialok tersebut dihasilkan dari pemanggilan metoda static showInputDialog dan showMessageDialog kelas JOptionPane. Berikut ini adalah tampilan kedua kotak dialog ketika item menu New Text dan About dipilih: