Java FocusTraversalPolicy .getLastComponent (Container aContainer)

Syntax

FocusTraversalPolicy.getLastComponent(Container aContainer) has the following syntax.

public abstract Component getLastComponent(Container aContainer)

Example

In the following code shows how to use FocusTraversalPolicy.getLastComponent(Container aContainer) method.


/*from w  w w  . j a v  a 2 s .  c o m*/

import java.awt.Component;
import java.awt.Container;
import java.awt.FocusTraversalPolicy;
import java.awt.GridLayout;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Main extends JPanel {

 public Main() {
     setLayout(new GridLayout(6, 1));
     add(new JButton("A"));
     add(new JButton("D"));
     
     add(new JButton("C"));
     
     add(new JButton("E"));
     add(new JButton("B"));
     add(new JButton("F"));
 }

 public static void main(String[] args) {
     JFrame frame = new JFrame();
     frame.setFocusTraversalPolicy(new AlphaButtonPolicy());
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     frame.setContentPane(new Main());
     frame.setSize(400, 300);
     frame.setVisible(true);
 }
}

class AlphaButtonPolicy extends FocusTraversalPolicy {

  private SortedMap getSortedButtons(Container focusCycleRoot) {
    if (focusCycleRoot == null) {
      throw new IllegalArgumentException("focusCycleRoot can't be null");
    }
    SortedMap result = new TreeMap(); // Will sort all buttons by text.
    sortRecursive(result, focusCycleRoot);
    return result;
  }

  private void sortRecursive(Map buttons, Container container) {
    for (int i = 0; i < container.getComponentCount(); i++) {
      Component c = container.getComponent(i);
      if (c instanceof JButton) { // Found another button to sort.
        buttons.put(((JButton) c).getText(), c);
      }
      if (c instanceof Container) { // Found a container to search.
        sortRecursive(buttons, (Container) c);
      }
    }
  }

  // The rest of the code implements the FocusTraversalPolicy interface.

  public Component getFirstComponent(Container focusCycleRoot) {
    SortedMap buttons = getSortedButtons(focusCycleRoot);
    if (buttons.isEmpty()) {
      return null;
    }
    return (Component) buttons.get(buttons.firstKey());
  }

  public Component getLastComponent(Container focusCycleRoot) {
    SortedMap buttons = getSortedButtons(focusCycleRoot);
    if (buttons.isEmpty()) {
      return null;
    }
    return (Component) buttons.get(buttons.lastKey());
  }

  public Component getDefaultComponent(Container focusCycleRoot) {
    return getFirstComponent(focusCycleRoot);
  }

  public Component getComponentAfter(Container focusCycleRoot, Component aComponent) {
    if (!(aComponent instanceof JButton)) {
      return null;
    }
    SortedMap buttons = getSortedButtons(focusCycleRoot);
    // Find all buttons after the current one.
    String nextName = ((JButton) aComponent).getText() + "\0";
    SortedMap nextButtons = buttons.tailMap(nextName);
    if (nextButtons.isEmpty()) { // Wrapped back to beginning
      if (!buttons.isEmpty()) {
        return (Component) buttons.get(buttons.firstKey());
      }
      return null; // Degenerate case of no buttons.
    }
    return (Component) nextButtons.get(nextButtons.firstKey());
  }

  public Component getComponentBefore(Container focusCycleRoot, Component aComponent) {
    if (!(aComponent instanceof JButton)) {
      return null;
    }

    SortedMap buttons = getSortedButtons(focusCycleRoot);
    SortedMap prevButtons = // Find all buttons before this one.
    buttons.headMap(((JButton) aComponent).getText());
    if (prevButtons.isEmpty()) { // Wrapped back to end.
      if (!buttons.isEmpty()) {
        return (Component) buttons.get(buttons.lastKey());
      }
      return null; // Degenerate case of no buttons.
    }
    return (Component) prevButtons.get(prevButtons.lastKey());
  }
}




















Home »
  Java Tutorial »
    java.awt »




BasicStroke
BorderLayout
CardLayout
Color
Cursor
Desktop
DesktopManager
DisplayMode
EventQueue
FlowLayout
FocusTraversalPolicy
Font
FontMetrics
GradientPaint
Graphics
Graphics2D
GraphicsConfiguration
GraphicsDevice
GraphicsEnvironment
GridBagConstraints
GridBagLayout
GridLayout
Image
ItemSelectable
KeyboardFocusManager
LayoutManager
LayoutManager2
Point
Rectangle
Robot
Shape
SplashScreen
SystemColor
SystemTray
TexturePaint
TrayIcon
Toolkit
Transparency