Lab_1_17 With Repairs
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
/**
* Write a description of the applet class Lab_1_17 here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class MyComboBoxTest2 extends JApplet
{
// Declare some constants
public static final int RED = 0;
public static final int BLUE = 1;
public static final int GREEN = 2;
public static final int YELLOW = 3;
public static final int BLACK = 4;
// Set up some color strings
String [] jcbItems = {"Red", "Blue", "Green", "Yellow", "Black"};
// Set up some colors
Color [] colors = {Color.red, Color.blue, Color.green, Color.yellow, Color.black};
// Set up default color
int currentColor = RED;
// Elements for building the GUI
Container cPane;
JButton b1 = new JButton("Blue");
JButton b2 = new JButton("Red");
JComboBox jcb1;
JTextField tf1 = new JTextField("This is a text field");
JTextArea ta1 = new JTextArea(5, 20);
JScrollPane sp1 = new JScrollPane(ta1);
DrawingPane dr1 = new DrawingPane();
public static void main(String [] args) {
MyComboBoxTest2 app = new MyComboBoxTest2();
app.init();
JFrame win = new JFrame("My Window");
Container winPane = win.getContentPane();
winPane.add(app);
win.addWindowListener( new WindowEventHandler() );
win.setSize(300, 400);
win.show();
}
/**
* Called by the browser or applet viewer to inform this Applet that it
* has been loaded into the system. It is always called before the first
* time that the start method is called.
*/
public void init()
{
cPane = getContentPane();
cPane.setLayout( new FlowLayout() );
// Add buttons
cPane.add(b1);
cPane.add(b2);
// Add listeners to buttons
b1.addActionListener( new B1_ButtonListener() );
b2.addActionListener( new B2_ButtonListener() );
jcb1 = new JComboBox( new MyComboBoxModel() );
// Set first item to show
jcb1.setSelectedIndex(0);
// Set how many items show
jcb1.setMaximumRowCount(3);
// Use anonymous class for listener on the ComboBox
jcb1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JComboBox cb = (JComboBox)e.getSource();
String color = (String)cb.getSelectedItem();
tf1.setText(color);
currentColor = cb.getSelectedIndex();
repaint();
}
});
cPane.add(jcb1);
cPane.add(tf1);
cPane.add(sp1);
// Put a border on our drawing pane
dr1.setBorder(BorderFactory.createTitledBorder("Drawing Panel"));
cPane.add(dr1);
}
/**
* Called by the browser or applet viewer to inform this Applet that it
* should start its execution. It is called after the init method and
* each time the Applet is revisited in a Web page.
*/
public void start() {
// provide any code requred to run each time
// web page is visited
}
/**
* Called by the browser or applet viewer to inform this Applet that
* it should stop its execution. It is called when the Web page that
* contains this Applet has been replaced by another page, and also
* just before the Applet is to be destroyed. If you do not have any
* resources that you need to release (such as threads that you may
* want to stop) you can remove this method.
*/
public void stop() {
// provide any code that needs to be run when page
// is replaced by another page or before Applet is destroyed
}
/**
* Called by the browser or applet viewer to inform this Applet that it
* is being reclaimed and that it should destroy any resources that it
* has allocated. The stop method will always be called before destroy.
* If you do not have any resources that you need to release you can
* remove this method.
*/
public void destroy() {
// provide code to be run when Applet is about to be destroyed.
}
/**
* Returns information about this applet.
* An applet should override this method to return a String containing
* information about the author, version, and copyright of the Applet.
*
* @return a String representation of information about this Applet
*/
public String getAppletInfo() {
// replace this with your own info
return "Title: BlueJ Applet Demo\n" +
"Author: Bruce Quig\n" +
"A simple applet that draws two strings.";
}
/**
* Returns information about the parameters that are understood by this
* Applet. You should return an array of Strings here to provide details
* about each of the parameters separately.
* Each element of the array should be a set of three Strings containing
* the name, the type, and a description.
*
* @return a String[][] representation of parameter information about
* this Applet
*/
public String[][] getParameterInfo() {
// provide parameter information about the applet
String paramInfo[][] = {
{"firstParameter", "1-10", "description of first parameter"},
{"secondParameter", "boolean", "description of second parameter"}
};
return paramInfo;
}
//
// NESTED CLASSES BELOW
//
class B1_ButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
currentColor = BLUE;
tf1.setText(jcbItems[currentColor]);
repaint();
}
}
class B2_ButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
currentColor = RED;
tf1.setText(jcbItems[currentColor]);
repaint();
}
}
class MyComboBoxModel extends AbstractListModel
implements ComboBoxModel {
String selection = null;
public Object getElementAt(int index) {
return jcbItems[index];
}
public int getSize() {
return jcbItems.length;
}
public void setSelectedItem(Object anItem) {
selection = (String) anItem;
}
public Object getSelectedItem() {
return selection;
}
}
class DrawingPane extends JPanel {
public void paintComponent(Graphics g) {
// Drawing panel has a border, how much does this inset?
Insets insets = getInsets();
super.paintComponent(g);
g.setColor(colors[currentColor]);
g.fillRect(insets.left + 2, insets.top, 30, 70);
g.setColor(Color.black);
g.drawString("Sample Applet", insets.left + 20, insets.top + 20);
g.drawString("created by BlueJ", insets.left + 20, insets.top + 40);
}
// This tell how big the panel should be
public Dimension getPreferredSize() {
return new Dimension(150,150);
}
}
}
// Close the window and bail
class WindowEventHandler extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}