Dual liste için internette biraz araştırma yaptım fakat tam istediğimi bulamayınca kendim yaptım. Siz uğraşmak zorunda kalmayın.
import java.awt.Container;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import javax.swing.AbstractListModel;
import javax.swing.BoxLayout;
import javax.swing.JDialog;
import javax.swing.JFrame;
/**
*
* @author Uğur Erdinç urec2005@hotmail.com
*/
public class DualListBoxDialog extends JDialog {
private static final long serialVersionUID = 1L;
private Set<String> listsValues = null;
private List<String> unSelectedElements = new ArrayList<String>();
private List<String> selectedElements = new ArrayList<String>();
private AbstractListModelImpl unSelectedElementsListModel = new AbstractListModelImpl();
private AbstractListModelImpl selectedElementsListModel = new AbstractListModelImpl();
private static boolean sendSelectedElements = false;
private javax.swing.JList SelectedElementsList;
private javax.swing.JButton rightButton;
private javax.swing.JButton allRightButton;
private javax.swing.JButton leftButton;
private javax.swing.JButton allLeftButton;
private javax.swing.JButton okButton;
private javax.swing.JButton cancelButton;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JButton moveToButtomButton;
private javax.swing.JButton moveToDownButton;
private javax.swing.JButton moveToTopButton;
private javax.swing.JButton moveToUpButton;
private javax.swing.JList unSelectedElementsList;
// End of variables declaration
private class AbstractListModelImpl extends AbstractListModel {
private static final long serialVersionUID = -3157345586446100254L;
private String[] strings = {""};
public AbstractListModelImpl() {
}
public int getSize() {
return strings.length;
}
public Object getElementAt(int i) {
return strings[i];
}
public void setData(String[] strings) {
this.strings = strings;
fireContentsChanged(strings, 0, strings.length - 1);
}
}
public DualListBoxDialog(Set<String> listsValues, JFrame frame) {
super(frame, true);
this.listsValues = listsValues;
unSelectedElements.addAll(listsValues);
Container contentPane = getContentPane();
contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.Y_AXIS));
jScrollPane1 = new javax.swing.JScrollPane();
unSelectedElementsList = new javax.swing.JList();
jScrollPane2 = new javax.swing.JScrollPane();
SelectedElementsList = new javax.swing.JList();
rightButton = new javax.swing.JButton();
allRightButton = new javax.swing.JButton();
leftButton = new javax.swing.JButton();
allLeftButton = new javax.swing.JButton();
moveToButtomButton = new javax.swing.JButton();
moveToDownButton = new javax.swing.JButton();
moveToUpButton = new javax.swing.JButton();
moveToTopButton = new javax.swing.JButton();
okButton = new javax.swing.JButton();
cancelButton = new javax.swing.JButton();
setName("Form");
jScrollPane1.setName("jScrollPane1");
contentPane.add(jScrollPane1);
unSelectedElementsList.setModel(unSelectedElementsListModel);
unSelectedElementsList.setName("unSelectedElementsList");
jScrollPane1.setViewportView(unSelectedElementsList);
jScrollPane2.setName("jScrollPane2");
SelectedElementsList.setModel(selectedElementsListModel);
SelectedElementsList.setName("SelectedElementsList");
jScrollPane2.setViewportView(SelectedElementsList);
contentPane.add(jScrollPane2);
rightButton.setText("Right");
rightButton.setName("rightButton");
rightButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
rightButtonActionPerformed(evt);
}
});
contentPane.add(rightButton);
allRightButton.setText("All Right");
allRightButton.setName("allRightButton");
allRightButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
allRightButtonActionPerformed(evt);
}
});
contentPane.add(allRightButton);
leftButton.setText("Left");
leftButton.setName("leftButton");
leftButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
leftButtonActionPerformed(evt);
}
});
contentPane.add(leftButton);
allLeftButton.setText("All Left");
allLeftButton.setName("allLeftButton");
allLeftButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
allLeftButtonActionPerformed(evt);
}
});
contentPane.add(allLeftButton);
moveToButtomButton.setText("Buttom");
moveToButtomButton.setName("moveToButtomButton");
moveToButtomButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
moveToButtomButtonActionPerformed(evt);
}
});
contentPane.add(moveToButtomButton);
moveToDownButton.setText("Down");
moveToDownButton.setName("moveToDownButton");
moveToDownButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
moveToDownButtonActionPerformed(evt);
}
});
contentPane.add(moveToDownButton);
moveToUpButton.setText("Up");
moveToUpButton.setName("moveToUpButton");
moveToUpButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
moveToUpButtonActionPerformed(evt);
}
});
contentPane.add(moveToUpButton);
moveToTopButton.setText("Top");
moveToTopButton.setName("moveToTopButton");
moveToTopButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
moveToTopButtonActionPerformed(evt);
}
});
contentPane.add(moveToTopButton);
okButton.setText("OK");
okButton.setName("okButton");
okButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
okButtonActionPerformed(evt);
}
});
contentPane.add(okButton);
cancelButton.setText("Cancel");
cancelButton.setName("cancelButton");
cancelButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cancelButtonActionPerformed(evt);
}
});
contentPane.add(cancelButton);
org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(contentPane);
contentPane.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING).add(layout.createSequentialGroup().add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING).add(layout.createSequentialGroup().addContainerGap().add(okButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 58, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE).add(18, 18, 18).add(cancelButton)).add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup().add(18, 18, 18).add(jScrollPane1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 172, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE).add(18, 18, 18).add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false).add(allRightButton, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).add(allLeftButton, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).add(leftButton, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).add(rightButton, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)).add(27, 27, 27).add(jScrollPane2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 172, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE).addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED).add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false).add(moveToUpButton, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).add(moveToButtomButton, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).add(moveToDownButton, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).add(moveToTopButton)))).addContainerGap(24, Short.MAX_VALUE)));
layout.setVerticalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING).add(layout.createSequentialGroup().add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING).add(layout.createSequentialGroup().add(117, 117, 117).add(rightButton).addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED).add(allRightButton).addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED).add(leftButton).addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED).add(allLeftButton)).add(layout.createSequentialGroup().add(45, 45, 45).add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING).add(jScrollPane2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 296, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE).add(jScrollPane1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 296, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))).add(layout.createSequentialGroup().add(121, 121, 121).add(moveToTopButton).addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED).add(moveToUpButton).addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED).add(moveToDownButton).addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED).add(moveToButtomButton))).addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 9, Short.MAX_VALUE).add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE).add(cancelButton).add(okButton)).addContainerGap(31, Short.MAX_VALUE)));
reorderLists();
pack();
}
private void rightButtonActionPerformed(java.awt.event.ActionEvent evt) {
int[] selectedListValues = unSelectedElementsList.getSelectedIndices();
if (selectedListValues != null && selectedListValues.length > 0) {
for (Integer i : selectedListValues) {
selectedElements.add(unSelectedElements.remove(i.intValue()));
}
reorderLists();
}
}
private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {
setVisible(false);
dispose();
sendSelectedElements = true;
}
private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {
setVisible(false);
dispose();
sendSelectedElements = false;
}
private void allRightButtonActionPerformed(java.awt.event.ActionEvent evt) {
selectedElements.addAll(unSelectedElements);
unSelectedElements.clear();
reorderLists();
}
private void leftButtonActionPerformed(java.awt.event.ActionEvent evt) {
int[] selectedListValues = SelectedElementsList.getSelectedIndices();
if (selectedListValues != null && selectedListValues.length > 0) {
for (Integer i : selectedListValues) {
unSelectedElements.add(selectedElements.remove(i.intValue()));
}
reorderLists();
}
}
private void allLeftButtonActionPerformed(java.awt.event.ActionEvent evt) {
unSelectedElements.addAll(selectedElements);
selectedElements.clear();
reorderLists();
}
private void moveToTopButtonActionPerformed(java.awt.event.ActionEvent evt) {
int[] selectedListValues = SelectedElementsList.getSelectedIndices();
if (selectedListValues != null && selectedListValues.length > 0) {
List<String> tempList = new ArrayList<String>();
for (Integer i : selectedListValues) {
tempList.add(selectedElements.get(i));
}
selectedElements.removeAll(tempList);
selectedElements.addAll(0, tempList);
reorderLists();
for (int i = 0; i < selectedListValues.length; i++) {
selectedListValues[i] = i;
}
SelectedElementsList.setSelectedIndices(selectedListValues);
}
}
private void moveToUpButtonActionPerformed(java.awt.event.ActionEvent evt) {
int[] selectedListValues = SelectedElementsList.getSelectedIndices();
int[] newSelectedListValues = new int[selectedListValues.length];
if (selectedListValues != null && selectedListValues.length > 0) {
int count = 0;
ArrayList<String> firstElements = new ArrayList<String>();
boolean checkFirstElement = true;
for (Integer i : selectedListValues) {
if (checkFirstElement && i == 0) {
firstElements.add(selectedElements.remove(0));
for (int j = 0; j < selectedListValues.length; j++) {
selectedListValues[j]--;
}
checkFirstElement = false;
newSelectedListValues[count] = Integer.MAX_VALUE;
} else if (i == 0) {
firstElements.add(selectedElements.remove(0));
newSelectedListValues[count] = Integer.MAX_VALUE;
for (int j = 0; j < selectedListValues.length; j++) {
selectedListValues[j]--;
}
} else {
selectedElements.add(i.intValue() - 1, selectedElements.remove(i.intValue()));
newSelectedListValues[count] = i.intValue() - 1;
}
count++;
}
count = 0;
if (firstElements.size() != 0) {
selectedElements.addAll(0, firstElements);
for (int i = 0; i < newSelectedListValues.length; i++) {
if (newSelectedListValues[i] == Integer.MAX_VALUE) {
newSelectedListValues[i] = count;
count++;
} else {
newSelectedListValues[i]++;
}
}
}
reorderLists();
SelectedElementsList.setSelectedIndices(newSelectedListValues);
}
}
private boolean moveGroupDown(ArrayList<Integer> group) {
if (group.isEmpty()) {
return false;
}
if (selectedElements.size() - 1 == group.get(group.size() - 1).intValue()) {
return false;
} else {
ArrayList<String> tempList = new ArrayList<String>();
for (int i = 0; i < group.size(); i++) {
tempList.add(selectedElements.remove(group.get(0).intValue()));
}
int position = group.get(0).intValue() + 1;
for (String s : tempList) {
selectedElements.add(position, s);
position++;
}
return true;
}
}
private void moveToDownButtonActionPerformed(java.awt.event.ActionEvent evt) {
int[] selectedListValues = SelectedElementsList.getSelectedIndices();
if (selectedListValues != null && selectedListValues.length > 0) {
ArrayList<Integer> group = new ArrayList<Integer>();
for (int index = 0; index < selectedListValues.length; index++) {
int selectedValue = selectedListValues[index];
if (group.isEmpty()) {
group.add(selectedValue);
} else {
if (group.get(group.size() - 1).intValue() == selectedValue - 1) {
group.add(selectedValue);
} else {
if (moveGroupDown(group)) {
for (int j = index - group.size(); j < index; j++) {
selectedListValues[j]++;
}
}
group.clear();
}
}
}
if (moveGroupDown(group)) {
for (int j = selectedListValues.length - group.size(); j < selectedListValues.length; j++) {
selectedListValues[j]++;
}
}
reorderLists();
SelectedElementsList.setSelectedIndices(selectedListValues);
}
}
private void moveToButtomButtonActionPerformed(java.awt.event.ActionEvent evt) {
int[] selectedListValues = SelectedElementsList.getSelectedIndices();
if (selectedListValues != null && selectedListValues.length > 0) {
int position = selectedElements.size() - 1;
List<Integer> tempList = new ArrayList<Integer>();
for (Integer i : selectedListValues) {
tempList.add(i);
}
Collections.sort(tempList);
Collections.reverse(tempList);
for (Integer i : tempList) {
selectedElements.add(position, selectedElements.remove(i.intValue()));
position--;
}
position = selectedElements.size() - 1;
reorderLists();
for (int i = 0; i < selectedListValues.length; i++) {
selectedListValues[i] = position;
position--;
}
SelectedElementsList.setSelectedIndices(selectedListValues);
}
}
private void reorderLists() {
Collections.sort(unSelectedElements);
selectedElementsListModel.setData(selectedElements.toArray(new String[selectedElements.size()]));
unSelectedElementsListModel.setData(unSelectedElements.toArray(new String[unSelectedElements.size()]));
getContentPane().repaint();
unSelectedElementsList.setSelectedIndices(new int[]{});
SelectedElementsList.setSelectedIndices(new int[]{});
}
}