So erstmal Code (ich weis is wieder recht viel und alles mögliche drin aber naja
):
ich habe den code von hier(http://www.java-forum.org/de/viewtopic.php?p=208138#208138) genommen und ein klein wenig angepasst...
- also zum einen hol ich mir meine daten aus der datenbank
- zum anderen lösche ich aus dem user-panel keine daten und trag auch keine ein...
also jetzt zu meinem problem:
ich möchte das die daten die ich am anfang in die liste gruppe eintrage nie gelöscht werden verschiebbar sind und am besten gar nicht markierbar und noch schöner wäre nicht markierbar und ne andere frabe haben...
die user sollen aber normal rein und rausgezogen werden können (aber viellicht nicht doppelt in einer gruppe (also z.b. grp a: da hab ich user b rein gezogen nun soll es so sein das ich in grp a keinen user b mehr rein ziehn darf)
Falsch:
Grp A
User B
User B
Richtig:
Grp A
User B
Grp B
Userb
mfg Kala
Code:
public class DlgUserGrpVerwaltung extends JDialog {
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JPanel jPanelUser = null;
private JPanel jPanelGruppe = null;
private JPanel jPanelSouth = null;
private JButton jButtonOk = null;
private JLabel jLabel = null;
private JButton jButtonAbbruch = null;
private JLabel jLabelUser = null;
private JLabel jLabelGruppe = null;
/**
* @param owner
*/
public DlgUserGrpVerwaltung(Frame owner) {
super(owner);
initialize();
}
/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setBounds(new Rectangle(0, 0, 500, 400));
this.setContentPane(getJContentPane());
}
/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
jLabelUser = new JLabel();
jLabelUser.setBounds(new Rectangle(15, 15, 225, 25));
jLabelUser.setText("User:");
jLabelUser.setHorizontalAlignment(JLabel.CENTER);
jLabelGruppe = new JLabel();
jLabelGruppe.setBounds(new Rectangle(250, 15, 225, 25));
jLabelGruppe.setText("Gruppen:");
jLabelGruppe.setHorizontalAlignment(JLabel.CENTER);
jContentPane = new JPanel();
jContentPane.setLayout(null);
jContentPane.add(getJPanelUser(), null);
jContentPane.add(getJPanelGruppe(), null);
jContentPane.add(getJPanelSouth(), null);
jContentPane.add(jLabelUser, null);
jContentPane.add(jLabelGruppe, null);
}
return jContentPane;
}
/**
* This method initializes jPanelUser
*
* @return javax.swing.JPanel
*/
private JPanel getJPanelUser() {
if (jPanelUser == null) {
jPanelUser = new JPanel();
jPanelUser.setLayout(new GridLayout(1,1));
jPanelUser.setBounds(new Rectangle(15, 55, 225, 260));
jPanelUser.add(createListUser("User"));
}
return jPanelUser;
}
/**
* This method initializes jPanelGruppe
*
* @return javax.swing.JPanel
*/
private JPanel getJPanelGruppe() {
if (jPanelGruppe == null) {
jPanelGruppe = new JPanel();
jPanelGruppe.setLayout(new GridLayout(1,1));
jPanelGruppe.setBounds(new Rectangle(250, 55, 225, 260));
jPanelGruppe.add(createListGruppe("Gruppe"));
}
return jPanelGruppe;
}
/**
* This method initializes jPanelSouth
*
* @return javax.swing.JPanel
*/
private JPanel getJPanelSouth() {
if (jPanelSouth == null) {
jLabel = new JLabel();
jLabel.setText("");
jLabel.setPreferredSize(new Dimension(40, 0));
jPanelSouth = new JPanel();
jPanelSouth.setLayout(new FlowLayout());
jPanelSouth.setBounds(new Rectangle(0, 333, 493, 40));
jPanelSouth.add(getJButtonOk(), null);
jPanelSouth.add(jLabel, null);
jPanelSouth.add(getJButtonAbbruch(), null);
}
return jPanelSouth;
}
/**
* This method initializes jButtonOk
*
* @return javax.swing.JButton
*/
private JButton getJButtonOk() {
if (jButtonOk == null) {
jButtonOk = new JButton();
jButtonOk.setText("OK");
jButtonOk.setPreferredSize(new Dimension(100, 30));
jButtonOk.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed()
}
});
}
return jButtonOk;
}
/**
* This method initializes jButtonAbbruch
*
* @return javax.swing.JButton
*/
private JButton getJButtonAbbruch() {
if (jButtonAbbruch == null) {
jButtonAbbruch = new JButton();
jButtonAbbruch.setPreferredSize(new Dimension(100, 30));
jButtonAbbruch.setText("Abbruch");
jButtonAbbruch.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
dispose();
}
});
}
return jButtonAbbruch;
}
private JPanel createListUser(String listId) {
DefaultListModel model = new DefaultListModel();
String erg[]=DB.getUser();
for(int i=0; i<erg.length; i++){
if(erg[i]==null){
break;
}
String erg_split[]=GlobaleFunction.split(erg[i], ": ");
model.addElement(erg_split[1]);
}
JList list = new JList(model);
list.setName(listId);
list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
JScrollPane scrollPane = new JScrollPane(list);
scrollPane.setPreferredSize(new Dimension(225, 250));
list.setDragEnabled(true);
list.setTransferHandler(new ListTransferHandler());
JPanel panel = new JPanel();
panel.add(scrollPane);
return panel;
}
private JPanel createListGruppe(String listId) {
DefaultListModel model = new DefaultListModel();
String erg[]=DB.getGrps();
for(int i=0; i<erg.length; i++){
if(erg[i]==null){
break;
}
String erg_split[]=GlobaleFunction.split(erg[i], ": ");
if(erg_split[1].compareToIgnoreCase("keine")!=0){
model.addElement(erg_split[1]);
}
}
JList list = new JList(model);
list.setName(listId);
list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
JScrollPane scrollPane = new JScrollPane(list);
scrollPane.setPreferredSize(new Dimension(225, 250));
list.setDragEnabled(true);
list.setTransferHandler(new ListTransferHandler());
JPanel panel = new JPanel();
panel.add(scrollPane);
return panel;
}
abstract class StringTransferHandler extends TransferHandler {
protected abstract String exportString(JComponent c);
protected abstract void importString(JComponent c, String str);
protected abstract void cleanup(JComponent c, boolean remove);
protected Transferable createTransferable(JComponent c) {
return new StringSelection(exportString(c));
}
public int getSourceActions(JComponent c) {
return COPY_OR_MOVE;
}
public boolean importData(JComponent c, Transferable t) {
JList source = (JList)c;
if(source.getName().compareToIgnoreCase("Gruppe")==0){
if (canImport(c, t.getTransferDataFlavors())) {
try {
String str = (String)t.getTransferData(DataFlavor.stringFlavor);
importString(c, str);
return true;
} catch (UnsupportedFlavorException ufe) {
} catch (IOException ioe) {
}
}
}else{
return true;
}
return false;
}
protected void exportDone(JComponent c, Transferable data, int action) {
JList source = (JList)c;
if(source.getName().compareToIgnoreCase("Gruppe")==0){
cleanup(c, action == MOVE);
}
}
public boolean canImport(JComponent c, DataFlavor[] flavors) {
for (int ndx = 0; ndx < flavors.length; ndx++) {
if (DataFlavor.stringFlavor.equals(flavors[ndx])) {
return true;
}
}
return false;
}
}
class ListTransferHandler extends StringTransferHandler {
public JList target;
public int[] rows = null;
public int addIndex = -1; //Position an der die Zeilen eingefügt werden
public int addCount = 0; //Anzahl der eingefügten Zeilen.
protected String exportString(JComponent c) {
JList list = (JList)c;
rows = list.getSelectedIndices();
StringBuffer buff = new StringBuffer();
for (int ndx = 0; ndx < rows.length; ndx++) {
Object val = ((DefaultListModel)list.getModel()).getElementAt(rows[ndx]);
buff.append(val == null ? "" : val.toString());
if (ndx != rows.length - 1) {
buff.append("\n");
}
}
return buff.toString();
}
protected void importString(JComponent c, String str) {
target = (JList)c;
DefaultListModel model = (DefaultListModel)target.getModel();
int index = target.getSelectedIndex();
//Der Benutzer wird daran gehindert die Daten auf sich selbst fallen zu lassen.
//Zum Beispiel, wenn der Benutzer die Zeilen #4,#5,#6 und #7 verschiebt und
//versucht sie unterhalb der Zeile #5 einzufügen, wäre es
//problematisch die ursprünglichen Zeilen zu entfernen.
//Daher wird dies nicht erlaubt.
if (rows != null && index >= rows[0] - 1 &&
index <= rows[rows.length - 1]) {
rows = null;
return;
}
int max = model.getSize();
if (index < 0) {
index = max;
} else {
index++;
if (index > max) {
index = max;
}
}
addIndex = index;
String[] values = str.split("\n");
addCount = values.length;
for (int ndx = 0; ndx < values.length ; ndx++) {
model.insertElementAt( values[ndx], index++);
}
//Wenn wir Zeilen innerhalb derselben Liste verschieben, müssen
//wir die Zeilen entsprechend anpassen, da diejenigen
//hinter dem Einfügungspunkt verschoben werden.
if (rows!= null && addCount > 0) {
for (int ndx = 0; ndx < rows.length; ndx++) {
if (rows[ndx] > addIndex) {
rows[ndx] += addCount;
}
}
}
}
protected void cleanup(JComponent c, boolean remove) {
JList source = (JList)c;
if (remove && rows != null) {
DefaultListModel model =
(DefaultListModel)source.getModel();
for (int ndx = rows.length - 1; ndx >= 0; ndx--) {
model.removeElementAt(rows[ndx]);
}
}
rows = null;
addCount = 0;
addIndex = -1;
}
}
}
ich habe den code von hier(http://www.java-forum.org/de/viewtopic.php?p=208138#208138) genommen und ein klein wenig angepasst...
- also zum einen hol ich mir meine daten aus der datenbank
- zum anderen lösche ich aus dem user-panel keine daten und trag auch keine ein...
also jetzt zu meinem problem:
ich möchte das die daten die ich am anfang in die liste gruppe eintrage nie gelöscht werden verschiebbar sind und am besten gar nicht markierbar und noch schöner wäre nicht markierbar und ne andere frabe haben...
die user sollen aber normal rein und rausgezogen werden können (aber viellicht nicht doppelt in einer gruppe (also z.b. grp a: da hab ich user b rein gezogen nun soll es so sein das ich in grp a keinen user b mehr rein ziehn darf)
Falsch:
Grp A
User B
User B
Richtig:
Grp A
User B
Grp B
Userb
mfg Kala