Java Swing How to - Unable to view LastItem In JscrollPane








Question

We would like to know how to unable to view LastItem In JscrollPane.

Answer

import java.awt.BorderLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
//w w w  . j  a va  2 s.  c  o m
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class Main extends JPanel implements ListSelectionListener {
  JList list;
  DefaultListModel listModel = new DefaultListModel();
  static final String addCommand = "Add";
  static final String deleteCommand = "Delete";
  JButton fireButton;
  JTextField employeeName;

  public Main() {
    super(new BorderLayout());
    listModel.addElement("A");
    listModel.addElement("B");
    listModel.addElement("C");

    list = new JList(listModel);
    list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    list.setSelectedIndex(0);
    list.addListSelectionListener(this);
    list.setVisibleRowCount(5);
    JScrollPane listScrollPane = new JScrollPane(list);

    JButton hireButton = new JButton(addCommand);
    HireListener hireListener = new HireListener(hireButton);
    hireButton.setActionCommand(addCommand);
    hireButton.addActionListener(hireListener);
    hireButton.setEnabled(false);

    fireButton = new JButton(deleteCommand);
    fireButton.setActionCommand(deleteCommand);
    fireButton.addActionListener(new FireListener());

    employeeName = new JTextField(10);
    employeeName.addActionListener(hireListener);
    employeeName.getDocument().addDocumentListener(hireListener);
    String name = listModel.getElementAt(list.getSelectedIndex()).toString();
    System.out.println(name);

    // Create a panel that uses BoxLayout.
    JPanel buttonPane = new JPanel();
    buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.LINE_AXIS));
    buttonPane.add(fireButton);
    buttonPane.add(Box.createHorizontalStrut(5));
    buttonPane.add(new JSeparator(SwingConstants.VERTICAL));
    buttonPane.add(Box.createHorizontalStrut(5));
    buttonPane.add(employeeName);
    buttonPane.add(hireButton);
    buttonPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));

    add(listScrollPane, BorderLayout.CENTER);
    add(buttonPane, BorderLayout.PAGE_END);
  }

  class FireListener implements ActionListener {

    public void actionPerformed(ActionEvent e) {
      int index = list.getSelectedIndex();
      listModel.remove(index);
      int size = listModel.getSize();
      if (size == 0) { // Nobody's left, disable firing.
        fireButton.setEnabled(false);
      } else { // Select an index.
        if (index == listModel.getSize()) {
          // removed item in last position
          index--;
        }
        list.setSelectedIndex(index);
        list.ensureIndexIsVisible(index);
      }
    }
  }
  class HireListener implements ActionListener, DocumentListener {
    boolean alreadyEnabled = false;
    JButton button;

    public HireListener(JButton button) {
      this.button = button;
    }
    public void actionPerformed(ActionEvent e) {
      String name = employeeName.getText();
      if (name.equals("") || alreadyInList(name)) {
        Toolkit.getDefaultToolkit().beep();
        employeeName.requestFocusInWindow();
        employeeName.selectAll();
        return;
      }

      int index = list.getSelectedIndex();
      if (index == -1) { // no selection, so insert at beginning
        index = 0;
      } else { // add after the selected item
        index++;
      }

      listModel.insertElementAt(employeeName.getText(), index);
      employeeName.requestFocusInWindow();
      employeeName.setText("");
      list.setSelectedIndex(index);
      list.ensureIndexIsVisible(index);
    }
    protected boolean alreadyInList(String name) {
      return listModel.contains(name);
    }
    public void insertUpdate(DocumentEvent e) {
      enableButton();
    }
    public void removeUpdate(DocumentEvent e) {
      handleEmptyTextField(e);
    }
    public void changedUpdate(DocumentEvent e) {
      if (!handleEmptyTextField(e)) {
        enableButton();
      }
    }
    private void enableButton() {
      if (!alreadyEnabled) {
        button.setEnabled(true);
      }
    }
    private boolean handleEmptyTextField(DocumentEvent e) {
      if (e.getDocument().getLength() <= 0) {
        button.setEnabled(false);
        alreadyEnabled = false;
        return true;
      }
      return false;
    }
  }
  public void valueChanged(ListSelectionEvent e) {
    if (e.getValueIsAdjusting() == false) {
      if (list.getSelectedIndex() == -1) {
        fireButton.setEnabled(false);
      } else {
        fireButton.setEnabled(true);
      }
    }
  }
  public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JComponent newContentPane = new Main();
    newContentPane.setOpaque(true);
    frame.setContentPane(newContentPane);
    frame.pack();
    frame.setVisible(true);
  }
}