Jslider显示数组的值

时间:2014-03-21 15:30:27

标签: java jslider

我'我试图将显示的值(选定的变量)更改为滑块的位置。主要问题是我工作的工作表指定了这一点 " displaySelected方法负责仅显示所选项目。看看它,并弄清楚为什么它总是显示元素0 - 它是非常简单的东西,而不是复杂的东西。" 我知道显示的变化需要选择的变量,我已经尝试过了(g.drawString(names [selected],200,150);)但问题是它只做了数组的值4并且一旦移动就重置为0并且没有,我知道我必须更改所选的值然后,我已尝试选择= selector.getValue();但我返回时出现空错误。

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;

    /**
     * A simple address database for Practical 5B
     * Demonstrates arrays, graphics, selection.
     */
    public class Addresses extends JFrame
                           implements ChangeListener 
{
        /**
     * Frame coordinate constants
     */
    private static final int FRAME_X = 200;
    private static final int FRAME_Y = 200;

    /**
     * Frame size constants
     */
    private static final int FRAME_WIDTH = 500;
    private static final int FRAME_HEIGHT = 400;

    /**
     *  The slider for selecting an address record (selectable 0 to size-1).
     */
    private JSlider selector;

    /**
     * Array to hold the database.
     */
    private String[] names;

    /**
     * To indicate which entry is currently selected.
     */
    private int selected;

    /**
     *  The drawing panel for display of information.
     */
    private JPanel panel;

    /**
     *  Drawing panel size constants
     */
    private final int PANEL_WIDTH = 400;
    private final int PANEL_HEIGHT = 300;

    /**
     *  The main program launcher for the Addresses class.
     *
     * @param  args  The command line arguments (ignored here).
     */



    public static void main( String[] args ) 
    {
        Addresses frame = new Addresses();
        frame.setSize(FRAME_WIDTH, FRAME_HEIGHT);
        frame.setUpData();       // Initial data set-up
        frame.createGUI();       // Initial GUI set-up
        frame.setVisible( true );
    } 

    /**
     *  Sets up the graphical user interface.
     */




    private void createGUI() 
    { 
        setDefaultCloseOperation( EXIT_ON_CLOSE );  
        Container window = getContentPane();
        window.setLayout( new FlowLayout() );

        // Slider for selecting an address entry
        selector = new JSlider(JSlider.VERTICAL, 0, 0, 0);
                   // Note: the useable range of the slider is 0 - 0 at the moment!
        window.add(selector);
        selector.addChangeListener(this);

        // Graphics panel for displaying the address list
        panel = new JPanel()
        {
            // paintComponent is called automatically when a screen refresh is needed
            public void paintComponent(Graphics g)
            {
                // g is a cleared panel area
                super.paintComponent(g); // Paint the panel's background
                paintScreen(g);          // Then the required graphics
            }
        };
        panel.setPreferredSize( new Dimension( PANEL_WIDTH, PANEL_HEIGHT ) );
        panel.setBackground( Color.white );
        window.add( panel );
    }

    /**
     * Helper method to set up the array data, and the associated variable selected,
     * with their initial configuration.
     */



    private void setUpData()
    {  
        // All the data is "built-in": set it up here - just one entry at the moment
        names = new String[6];         // Create the array with space for one entry
        names[0] = "James";            // The entry
        names[1] = "Connor";
        names[2] = "Alfred";
        names[3] = "Billy";
        names[4] = "Jack";
        names[5] = "Chris";





        selected = names.length-1;                  // Indicate that entry 0 is selected
    }

    /**
     * This methods redraws the screen.
     */



    private void paintScreen(Graphics g) 
    {
        displayList(g);
        displaySelected(g);
    }

    /**
     * Display all the elements of array names in a column on the screen.
     */
    private void displayList(Graphics g) 
    {
        int y = 100;                       // Top y coordinate of the column

        g.setColor(Color.black);
       /* 
        g.drawString(names[0], 20, y);
        g.drawString(names[1], 20, y+25);
        g.drawString(names[2], 20, y+50);
        g.drawString(names[3], 20, y+75);
        g.drawString(names[4], 20, y+100);  
        g.drawString(names[5], 20, y+125);
        */

        for (int i = 0; i< names.length; i++)
            g.drawString(names[i], 20, y+25*i);

    } 

    /**
     * Display the single element of array names that is currently selected by the slider.
     */



    private void displaySelected(Graphics g) 
    {
        g.setColor(Color.black);
        g.drawString("Current selection is:", 200, 135);

        g.drawString(names[selected], 200, 150);



    }

    /**
     *  Reacts to adjustment of the slider.
     *  Notes the new selector setting, then forces screen refresh.
     */
    public void stateChanged( ChangeEvent e ) 
    {
        // selector has been adjusted: record the new setting
        selected = selector.getValue();
        repaint(); // Refresh the screen
    }

}

1 个答案:

答案 0 :(得分:0)

您永远不会设置滑块的最大值。这就是为什么你无法移动它的原因。对代码进行此更改,然后您就可以调试此程序的其余部分。

selector = new JSlider(JSlider.VERTICAL, 0,   names.length-1 /* HERE */  , 0);