Recommended: Sing it, brah! 5 fabulous songs for developers
JW's Top 5
Hi all
Sorry, I'm a complete novice and I'm having trouble compiling ListDialogRunner.java and getting the error message;
ListDialogRunner.java:61: cannot find symbol
symbol: variable ListDialog
String = selectedName = ListDialog.showDialog(
From what I can tell, the compiler isn't bringing in the ListDialog .class file properly but I didn't change anything and as much as I try I can't find any answers online.
I would really appreciate any help you could give me. Thanks.
package components;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
/**
* A 1.4 application that brings up a ListDialog.
*/
public class ListDialogRunner {
static JFrame frame;
static String[] names = {"Arlo", "Cosmo", "Elmo", "Hugo",
"Jethro", "Laszlo", "Milo", "Nemo",
"Otto", "Ringo", "Rocco", "Rollo"};
public static JPanel createUI() {
//Create the labels.
JLabel intro = new JLabel("The chosen name:");
final JLabel name = new JLabel(names[1]);
intro.setLabelFor(name);
//Use a wacky font if it exists. If not, this falls
//back to a font we know exists.
name.setFont(getAFont());
//Create the button.
final JButton button = new JButton("Pick a new name...");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String selectedName = ListDialog.showDialog(
frame,
button,
"Baby names ending in O:",
"Name Chooser",
names,
name.getText(),
"Cosmo ");
name.setText(selectedName);
}
});
//Create the panel we'll return and set up the layout.
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel,
BoxLayout.PAGE_AXIS));
panel.setBorder(BorderFactory.createEmptyBorder(20,20,10,20));
intro.setAlignmentX(JComponent.CENTER_ALIGNMENT);
name.setAlignmentX(JComponent.CENTER_ALIGNMENT);
button.setAlignmentX(JComponent.CENTER_ALIGNMENT);
//Add the labels to the content pane.
panel.add(intro);
panel.add(Box.createVerticalStrut(5)); //extra space
panel.add(name);
//Add a vertical spacer that also guarantees us a minimum width:
panel.add(Box.createRigidArea(new Dimension(150,10)));
//Add the button.
panel.add(button);
return panel;
}
/**
* Finds a cursive font to use, or falls back to using
* an italic serif font.
*/
protected static Font getAFont() {
//initial strings of desired fonts
String[] desiredFonts =
{"French Script", "FrenchScript", "Script"};
String[] existingFamilyNames = null; //installed fonts
String fontName = null; //font we'll use
//Search for all installed font families. The first
//call may take a while on some systems with hundreds of
//installed fonts, so if possible execute it in idle time,
//and certainly not in a place that delays painting of
//the UI (for example, when bringing up a menu).
//
//In systems with malformed fonts, this code might cause
//serious problems; use the latest JRE in this case. (You'll
//see the same problems if you use Swing's HTML support or
//anything else that searches for all fonts.) If this call
//causes problems for you under the latest JRE, please let
//us know:
//http://java.sun.com/docs/books/tutorial/forms/sendusmail.html
GraphicsEnvironment ge =
GraphicsEnvironment.getLocalGraphicsEnvironment();
if (ge != null) {
existingFamilyNames = ge.getAvailableFontFamilyNames();
}
//See if there's one we like.
if ((existingFamilyNames != null) && (desiredFonts != null)) {
int i = 0;
while ((fontName == null) && (i < desiredFonts.length)) {
//Look for a font whose name starts with desiredFonts[i].
int j = 0;
while ((fontName == null) && (j < existingFamilyNames.length)) {
if (existingFamilyNames[j].startsWith(desiredFonts[i])) {
//We've found a match. Test whether it can display
//the Latin character 'A'. (You might test for
//a different character if you're using a different
//language.)
Font f = new Font(existingFamilyNames[j],
Font.PLAIN, 1);
if (f.canDisplay('A')) {
fontName = existingFamilyNames[j];
System.out.println("Using font: " + fontName);
}
}
j++; //Look at next existing font name.
}
i++; //Look for next desired font.
}
}
//Return a valid Font.
if (fontName != null) {
return new Font(fontName, Font.PLAIN, 36);
} else {
return new Font("Serif", Font.ITALIC, 36);
}
}
/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event-dispatching thread.
*/
private static void createAndShowGUI() {
//Create and set up the window.
frame = new JFrame("Name That Baby");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Create and set up the content pane.
JComponent newContentPane = createUI();
newContentPane.setOpaque(true); //content panes must be opaque
frame.setContentPane(newContentPane);
//Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}