JList Elemente in ein andres JList Adden

asiklar

Mitglied
hallo,

ich bin auf der suche nach ein möglichkeit, wie ich von einem JListA Elemente in ein anderer JListB adden kann. Diese gewählter Element soll nur dann in JListB geadded werden, sobald es in JListB nicht existirt. Von JListA darf zu dem nur ein Element in JListB geaddet werden.

Irgend wie klappt aber nicht, so wie es mache.

Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
  
public class test extends Frame {
  // 
  // componente
  private JPanel topPanel = new JPanel(null, true);
  //
  private JList JListA = new JList();
  private DefaultListModel JListAModel = new DefaultListModel();
  private JScrollPane JListAScrollPane = new JScrollPane(JListA);
  //
  private JList JListB = new JList();
  private DefaultListModel JListBModel = new DefaultListModel();
  private JScrollPane JListBScrollPane = new JScrollPane(JListB);
  //
  private String[] elemente = { "Element1", "Element2", "Element3", "Element4", "Element5" };
  //
  //
  public test(String title) {
    //
    super (title);
    // 
    // window close event
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent evt) { 
        dispose(); 
      }
    });
    //
    //
    int frameWidth = 1000; 
    int frameHeight = 550;
    //
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    Panel cp = new Panel(null);
    cp.setBackground(new Color(0x404040));
    add(cp);
    //
    //
    JListA.setModel(JListAModel);
    JListA.setFocusable(false);
    JListAScrollPane.setBounds(263, 100, 200, 200);
    JListA.setBackground(Color.WHITE);
    cp.add(JListAScrollPane);
    
    for (int i = 0; i<elemente.length; i++) {
      JListAModel.addElement(elemente[i]);
    } 
    
    ListSelectionListener listSelectionListener = new ListSelectionListener() {
      public void valueChanged(ListSelectionEvent listSelectionEvent) {  
        //
        //
        System.out.println("First index: " + listSelectionEvent.getFirstIndex() + " Last index: " + listSelectionEvent.getLastIndex()); 
        //
        int li = listSelectionEvent.getFirstIndex();
        int fi = listSelectionEvent.getLastIndex();
        //
        Object fo =  JListAModel.getElementAt(listSelectionEvent.getFirstIndex());
        Object lo =  JListAModel.getElementAt(listSelectionEvent.getLastIndex());
        //
        if ( !(JListBModel.contains(lo)) ) {
          JListBModel.addElement(lo);
        }else {
          JListBModel.removeElement(fo); 
        } 
      }
    };
    JListA.addListSelectionListener(listSelectionListener);
    //
    //
    JListB.setModel(JListBModel); 
    JListB.setFocusable(false);
    JListBScrollPane.setBounds(745, 100, 200, 200);
    cp.add(JListBScrollPane);
    //
    //
    setResizable(false);
    setVisible(true);
    //
  }
  //
  //
  public static void main(String[] args) {
    new test("test");
  }
  
}

bitte um Hilfe stellung, wo mache ich denk fehler, dass es nicht klappt.

danke vorraus

mfg
 
Zuletzt bearbeitet:
wenn lastIndex höher als firstindex ist, wird in JListB geadded, aber firstindex wird nict richtig entfern.
 
Zuletzt bearbeitet:
Ich muss mir deinen Code noch durchlesen, was mir aber auffällt:
Frame ist von AWT, deine ganzen anderen Komponenten kommen von SWING.
Das sollte man nicht vermischen, daher nimm lieber JFrame.

Bei dir sind firstIndex und lastIndex vertauscht.

Java:
        System.out.println("First index: " + listSelectionEvent.getFirstIndex() + " Last index: " + listSelectionEvent.getLastIndex());
        
        int first = listSelectionEvent.getFirstIndex();
        int last = listSelectionEvent.getLastIndex();
   
        Object fo =  JListAModel.getElementAt(first);
        Object lo =  JListAModel.getElementAt(last);
       
 
        if ( !(JListBModel.contains(lo)) ) {
          JListBModel.addElement(lo);
        }else {
          JListBModel.removeElement(fo);

Erstmal wundere ich mich, dass du die ListA nicht anfasst, da müsstest du dann doch das Element auch entfernen. Ebenso wundere ich mich, dass du das element aus der ListB entfernst, wenn es schon drin ist. Solltest du es dann nicht lieber drin lassen?
 
Zuletzt bearbeitet:
Frame ist von AWT, deine ganzen anderen Komponenten kommen von SWING.
Das sollte man nicht vermischen, daher nimm lieber JFrame.
ok

Bei dir sind firstIndex und lastIndex vertauscht.
ok

Erstmal wundere ich mich, dass du die ListA nicht anfasst, da müsstest du dann doch das Element auch entfernen. Ebenso wundere ich mich, dass du das element aus der ListB entfernst, wenn es schon drin ist. Solltest du es dann nicht lieber drin lassen?

JListB ist erstmal leer, kann nur ein Element von JListA wählen, jedesmal nach Element Wahl checke ich JListB auf contain von JListA Element, soll dann hinzufügen, wenn false gibt, bzw. dann vorher gewählte bzw. in JListB hinzugefügte Element wieder entfernen, daher first&last index verwendung.
 

Zurück
Oben