Selectionlistspanel

Description

Panneau intégrant deux listes permettant la selection d'éléments de l'une vers l'autre.

Source / Exemple :


package com.infodavid.gui;
/*

  • Copyright (c) 2001 David Rolland
*
  • Redistribution and use in source and binary forms, with or without
  • modification, are permitted provided that the following conditions are met:
*
  • -Redistributions of source code must retain the above copyright notice, this
  • list of conditions and the following disclaimer.
*
  • -Redistribution in binary form must reproduct the above copyright notice,
  • this list of conditions and the following disclaimer in the documentation
  • and/or other materials provided with the distribution.
*
  • This software is provided "AS IS," without a warranty of any kind. ALL
  • EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
  • IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
  • NON-INFRINGEMENT, ARE HEREBY EXCLUDED. D.Rolland SHALL NOT BE
  • LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
  • OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL D.Rolland
  • BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
  • INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
  • CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
  • OR INABILITY TO USE SOFTWARE, EVEN IF D.Rolland HAS BEEN ADVISED OF THE
  • POSSIBILITY OF SUCH DAMAGES.
*
  • You acknowledge that Software is not designed,licensed or intended for use in
  • the design, construction, operation or maintenance of any nuclear facility.
  • /
import javax.swing.JSplitPane; import javax.swing.JList; import javax.swing.JButton; import java.awt.dnd.*; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import sun.net.www.MimeEntry; import java.beans.PropertyVetoException; /* infodavid */ import com.infodavid.lang.LanguageObject; import com.infodavid.lang.Language; import com.infodavid.gui.events.ActionToChangeListener; import com.infodavid.gui.events.ActionToDropListener; /**
  • Title:
  • Description:
  • Copyright: Copyright (c) 2001
  • Company: David Rolland, infodavid@chez.com
  • @author David Rolland, infodavid@chez.com
  • @version 0.2
  • /
public class SelectionListsPanel extends AbstractPanel { private class DefaultGlobalListTargetListener extends ActionToDropListener { public DefaultGlobalListTargetListener(ActionListener al) { super(al); } public boolean isDragAcceptable(DropTargetEvent e) { return (adding || removing) && isEnabled(); } public boolean isDropAcceptable(DropTargetEvent e) { return adding && isEnabled(); } public void dragEnter(DropTargetDragEvent e) { removing = false; if (!isDragAcceptable(e)) { e.rejectDrag(); } } public void dragExit(DropTargetEvent e) { if (adding) { adding = false; } else { removing = true; } } public void drop(DropTargetDropEvent e) { if (!isDropAcceptable(e)) { e.rejectDrop(); } else { e.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); super.drop(e); adding = false; e.dropComplete(true); } } } private class DefaultSelectionListTargetListener extends ActionToDropListener { public DefaultSelectionListTargetListener(ActionListener al) { super(al); } public boolean isDragAcceptable(DropTargetEvent e) { return (adding || removing) && isEnabled(); } public boolean isDropAcceptable(DropTargetEvent e) { return removing && isEnabled(); } public void dragEnter(DropTargetDragEvent e) { adding = false; if (!isDragAcceptable(e)) { e.rejectDrag(); } } public void dragExit(DropTargetEvent e) { if (removing) { removing = false; } else { adding = true; } } public void drop(DropTargetDropEvent e) { if (!isDropAcceptable(e)) { e.rejectDrop(); } else { e.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); super.drop(e); removing = false; e.dropComplete(true); } } } private ListPanel selectionPanel = null; private ListPanel globalPanel = null; private JButton add = null; private JButton remove = null; private boolean removing = false; private boolean adding = false; /**
  • Constructeur
*
  • @param Language Dictionnaire
  • @param int Orientation
  • @exception PropertyVetoException Exception liée à la validité du dictionnaire
  • /
public SelectionListsPanel(Language lang, int orientation) throws PropertyVetoException { if (lang == null) { throw new IllegalArgumentException(getClass().getName() + "." + getClass().getName() + "(Language)"); } initializePanel(lang, orientation); } /**
  • Non disponible
*
  • @exception IllegalAccessError Exception liée a la non implementation
  • /
public MimeEntry[] getMimeType() { throw new IllegalAccessError(getClass().getName() + ".getMimeType(), not used !"); } public ListPanel getSelectionPanel() { return selectionPanel; } public JList getSelectionList() { return getSelectionPanel().getList(); } public JList getGlobalList() { return getGlobalPanel().getList(); } public ListPanel getGlobalPanel() { return globalPanel; } private void initializePanel(Language language, int orientation) throws PropertyVetoException { LanguageObject lang = null; selectionPanel = new ListPanel(); remove = new JButton(); lang = language.get("Remove", remove); selectionPanel.getContentPanel().add(remove, BorderLayout.SOUTH); globalPanel = new ListPanel(); add = new JButton(); lang = language.get("Add", add); globalPanel.getContentPanel().add(add, BorderLayout.SOUTH); JSplitPane splitPane = new JSplitPane( orientation, selectionPanel.getContentPanel(), globalPanel.getContentPanel() ); splitPane.setContinuousLayout(true); splitPane.setDoubleBuffered(true); splitPane.setOneTouchExpandable(true); setContentComponent(splitPane); } public void addActionListener(ActionListener l) { super.addActionListener(l); selectionPanel.addActionListener(l); globalPanel.addActionListener(l); add.addActionListener(l); remove.addActionListener(l); JList list = (JList)selectionPanel.getContentComponent(); list.setDragEnabled(true); list.setDropTarget( new DropTarget( list, new DefaultSelectionListTargetListener(l) ) ); list = (JList)globalPanel.getContentComponent(); list.setDragEnabled(true); list.setDropTarget( new DropTarget( list, new DefaultGlobalListTargetListener(l) ) ); } public void removeActionListener(ActionListener l) { super.removeActionListener(l); add.removeActionListener(l); remove.removeActionListener(l); selectionPanel.removeActionListener(l); globalPanel.removeActionListener(l); JList list = (JList)selectionPanel.getContentComponent(); list.setDropTarget(null); list = (JList)globalPanel.getContentComponent(); list.setDropTarget(null); } public static void main(String[] args) { try { javax.swing.JFrame f = new javax.swing.JFrame(); SelectionListsPanel p = new SelectionListsPanel(new Language(), JSplitPane.HORIZONTAL_SPLIT); p.setTitle("Test"); p.getGlobalPanel().setTitle("Global"); p.getSelectionPanel().setTitle("Selection"); p.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println(e); } }); JList list = p.getGlobalList(); list.setListData(new String[] { "item1" }); list = p.getSelectionList(); list.setListData(new String[] { "item2", "item3" }); f.getContentPane().add(p.getContentPanel()); f.pack(); f.show(); } catch (Exception e) { e.printStackTrace(); } } }

Conclusion :


Tester le main...

Codes Sources

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (cs_trap)