Listing 12.1 JScrollBar (TJScrollBar.java) /* * * */ import javax.swing.*; import java.awt.*; import java.awt.event.*; public class TJScrollBar extends JApplet { // 1. Create references to two scrollbars. JScrollBar horizSBar = null; JScrollBar vertiSBar = null; // 2. Create the other necessary text fields and a panel. JPanel panel1 = null; JPanel panel2 = null; JTextField tf = null; JTextField tf1 = null; JTextField tf2 = null; JTextField tf3 = null; JTextField tf4 = null; JTextField tf5 = null; JTextField tf6 = null; public void init() { // 3. Get a handle to the applet's container. Container c = this.getContentPane(); c.setBackground(Color.lightGray); // 4. Create horizontal and vertical scrollbar objects. horizSBar = new JScrollBar(JScrollBar.HORIZONTAL, 20, 60, 0, 100); horizSBar.setBlockIncrement(50); ScrollBarListener hsbListener = new ScrollBarListener(); horizSBar.addAdjustmentListener(hsbListener); vertiSBar = new JScrollBar(); vertiSBar.setOrientation(JScrollBar.VERTICAL); vertiSBar.setValue(10); vertiSBar.setVisibleAmount(30); vertiSBar.setMinimum(0); vertiSBar.setMaximum(50); ScrollBarListener vsbListener = new ScrollBarListener(); vertiSBar.addAdjustmentListener(vsbListener); // 5. Create a panel object panel1. JPanel panel1 = new JPanel(); panel1.setLayout(new GridLayout(1, 2)); // 6. Create a label and text field objects. // and fix them to panel1 JLabel label = new JLabel("ScrollBar selected:", JLabel.CENTER); tf = new JTextField(); panel1.add(label); panel1.add(tf); // 7. Create a panel object panel2. JPanel panel2 = new JPanel(); GridLayout gridLayout = new GridLayout(6, 2); gridLayout.setHgap(20); panel2.setLayout(gridLayout); // 8. Create the following labels and text fields, and // fix them to the panel2. JLabel label1 = new JLabel("Current Value:", JLabel.RIGHT); JLabel label2 = new JLabel("Visible Extent:", JLabel.RIGHT); JLabel label3 = new JLabel("Minimum Value:", JLabel.RIGHT); JLabel label4 = new JLabel("Maximum Value:", JLabel.RIGHT); JLabel label5 = new JLabel("Unit Increment:", JLabel.RIGHT); JLabel label6 = new JLabel("Block Increment:", JLabel.RIGHT); tf1 = new JTextField(); tf2 = new JTextField(); tf3 = new JTextField(); tf4 = new JTextField(); tf5 = new JTextField(); tf6 = new JTextField(); panel2.add(label1); panel2.add(tf1); panel2.add(label2); panel2.add(tf2); panel2.add(label3); panel2.add(tf3); panel2.add(label4); panel2.add(tf4); panel2.add(label5); panel2.add(tf5); panel2.add(label6); panel2.add(tf6); // 9. Set the border layout for the applet's content pane // and add the panels and scrollbars as give next. BorderLayout borderLayout = new BorderLayout(); borderLayout.setHgap(10); borderLayout.setVgap(20); c.setLayout(borderLayout); c.add("North", panel1); c.add("Center", panel2); c.add("South", horizSBar); c.add("East", vertiSBar); } // 10. A listener class that handle the scrollbar adjustment events class ScrollBarListener implements AdjustmentListener { public void adjustmentValueChanged(AdjustmentEvent evt) { JScrollBar sBar = (JScrollBar) evt.getSource(); if (sBar.getOrientation() == 0) { tf.setText("HORIZONTAL"); tf1.setText(Integer.toString(sBar.getValue())); tf2.setText(Integer.toString(sBar.getVisibleAmount())); tf3.setText(Integer.toString(sBar.getMinimum())); tf4.setText(Integer.toString(sBar.getMaximum())); tf5.setText(Integer.toString(sBar.getUnitIncrement())); tf6.setText(Integer.toString(sBar.getBlockIncrement())); } else if (sBar.getOrientation() == 1) { tf.setText("VERTICAL"); tf1.setText(Integer.toString(sBar.getValue())); tf2.setText(Integer.toString(sBar.getVisibleAmount())); tf3.setText(Integer.toString(sBar.getMinimum())); tf4.setText(Integer.toString(sBar.getMaximum())); tf5.setText(Integer.toString(sBar.getUnitIncrement())); tf6.setText(Integer.toString(sBar.getBlockIncrement())); } } } } Listing 12.2 JScrollPane (TJScrollPane.java) /* * * */ import javax.swing.*; import java.awt.*; public class TJScrollPane extends JApplet { // 1. Create a scroll pane object and the other // necessary objects. JScrollPane scrollPane = null; JLabel label = null; // Not a canvas for JScrollPane! JPanel panel = null; // supports double buffering Icon icon = null; public void init() { // 2. Get a handle on the JApplet's container. Container container = getContentPane(); container.setLayout(new GridLayout(1,1)); // 3. Create a Swing label and a panel for double buffering. icon = new ImageIcon("saravan.gif"); label = new JLabel(icon); panel = new JPanel(); panel.add(label); // 4. Create a scroll pane and add the panel to it. scrollPane = new JScrollPane(panel, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); // 5. Add the scroll pane to the contentpane of JApplet. container.add(scrollPane); } } Listing 12.3 Jslider Audio Control Panel (TJSlider.java) // Demonstrates the Swing slider widget... /* * * */ import javax.swing.*; import javax.swing.event.*; import java.awt.*; import java.awt.event.*; public class TJSlider extends JApplet { // 1. Declare the required JSlider references. JSlider slider = null; JSlider slider1 = null; JSlider slider2 = null; JSlider slider3 = null; JSlider slider4 = null; JSlider slider5 = null; // 2. Other necessary fields JTextField textField = null; JTextField textField1 = null; JTextField textField2 = null; GridBagLayout gridbag = null; GridBagConstraints c = null; Container container = null; boolean buttonPressed = false; public void init() { // 3. Get a handle on the container of JApplet // and assign the color and layout model. container = this.getContentPane(); container.setBackground(Color.lightGray); gridbag = new GridBagLayout(); container.setLayout(gridbag); // 4. Constraints for the layout c = new GridBagConstraints(); c.weightx = 1.0; c.weighty = 1.0; c.fill = GridBagConstraints.NONE; c.insets = new Insets(4, 4, 4, 4); // 5. Label showing ëEqualizer (x 100Hz) c.gridx = 0; c.gridy = 0; c.gridwidth = 1; c.gridheight = 1; c.ipadx = 150; Font font = new Font("Helvetica", Font.BOLD, 14); JLabel label = new JLabel("Equalizer (X 100Hz)", JLabel.CENTER); label.setFont(font); gridbag.setConstraints(label, c); container.add(label); // 6. Create horizontal slider1. c.gridy = 1; setSlider(JSlider.HORIZONTAL, true, 0, 20, 5, 5, 1); slider3 = slider; slider3.setLabelTable(slider3.createStandardLabels(5)); slider3.setPaintLabels(true); // 7. Create horizontal slider2. c.gridy = 2; setSlider(JSlider.HORIZONTAL, true, 20, 100, 60, 10, 5); slider4 = slider; slider4.setLabelTable(slider4.createStandardLabels(10)); slider4.setPaintLabels(true); // 8. Create horizontal slider3. c.gridy = 3; setSlider(JSlider.HORIZONTAL, true, 100, 200, 150, 20, 10); slider5 = slider; slider5.setLabelTable(slider5.createStandardLabels(20)); slider5.setPaintLabels(true); // 9. Create the toggle button for the volume balance. c.ipadx = 0; c.gridx = 1; c.gridy = 4; c.gridwidth = 2; c.gridheight = 1; setButton("L|R Balance"); // 10. Create volume slider1. c.ipady = 75; c.gridy = 1; c.gridwidth = 1; c.gridheight = 3; setSlider(JSlider.VERTICAL, false, 0, 10, 8); slider1 = slider; // 11. Create volume slider2. c.gridx = 2; c.gridy = 1; setSlider(JSlider.VERTICAL, false, 0, 10, 8); slider2 = slider; // 12. Create textfield1 for the volume slider1. c.ipadx = 0; c.ipady = 0; c.gridx = 1; c.gridy = 0; c.gridwidth = 1; c.gridheight = 1; setTextField(slider1); textField1 = textField; // 13. Create textfield2 for the volume slider2. c.gridx = 2; setTextField(slider2); textField2 = textField; } // 14. Creates a slider object. public void setSlider(int orientation, boolean paintTicks, int minimumValue, int maximumValue, int initValue) { setSlider(orientation, paintTicks, minimumValue, maximumValue, initValue, 0, 0); } // 15. Overload the previous above. public void setSlider(int orientation, boolean paintTicks, int minimumValue, int maximumValue, int initValue, int majorTickSpacing, int minorTickSpacing) { slider = new JSlider(orientation, minimumValue, maximumValue, initValue); slider.addChangeListener(new SliderListener()); slider.setPaintTicks(paintTicks); slider.setMajorTickSpacing(majorTickSpacing); slider.setMinorTickSpacing(minorTickSpacing); gridbag.setConstraints(slider, c); container.add(slider); } // 16. Create the toggle button for the balance of channels. public void setButton(String name) { JToggleButton button = new JToggleButton(name); button.setBackground(Color.lightGray); gridbag.setConstraints(button, c); button.addActionListener(new ButtonListener()); container.add(button); } // 17. Create text field objects. public void setTextField(JSlider slider) { textField = new JTextField(2); textField.setText(Integer.toString(slider.getValue())); gridbag.setConstraints(textField, c); container.add(textField); } // 18. Button listener for the channel balance class ButtonListener implements ActionListener { public void actionPerformed(ActionEvent actEvt) { JToggleButton buttonTemp = (JToggleButton) actEvt.getSource(); buttonPressed = buttonTemp.isSelected(); slider2.setValue(slider1.getValue()); } } // 19. The slider knob position change listener class SliderListener implements ChangeListener { public void stateChanged(ChangeEvent chngEvt) { updateTextField(slider1.getValue(), slider2.getValue()); JSlider sliderTemp = (JSlider) chngEvt.getSource(); if(buttonPressed) { if(sliderTemp == slider1) { slider2.setValue(slider1.getValue()); } else if(sliderTemp == slider2) { slider1.setValue(slider2.getValue()); } } } } public void updateTextField(int currValue1, int currValue2) { textField1.setText(Integer.toString(currValue1)); textField2.setText(Integer.toString(currValue2)); } }