Revision 202 org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.swing/org.gvsig.tools.swing.impl/src/main/java/org/gvsig/tools/swing/impl/dynobject/dynfield/JNDynFieldComponent.java
JNDynFieldComponent.java | ||
---|---|---|
43 | 43 |
import java.util.List; |
44 | 44 |
|
45 | 45 |
import javax.swing.BorderFactory; |
46 |
import javax.swing.DefaultListModel; |
|
47 | 46 |
import javax.swing.JButton; |
48 | 47 |
import javax.swing.JList; |
49 | 48 |
import javax.swing.JPanel; |
... | ... | |
56 | 55 |
import org.gvsig.tools.dynobject.DynField; |
57 | 56 |
import org.gvsig.tools.service.ServiceException; |
58 | 57 |
import org.gvsig.tools.swing.api.ToolsSwingLocator; |
58 |
import org.gvsig.tools.swing.api.dynobject.ValueChangedListener; |
|
59 | 59 |
import org.gvsig.tools.swing.api.dynobject.dynfield.JDynFieldComponent; |
60 | 60 |
import org.gvsig.tools.swing.api.dynobject.dynfield.ValueField; |
61 | 61 |
import org.gvsig.tools.swing.spi.DelegatedJFieldComponent; |
... | ... | |
64 | 64 |
* @author <a href="mailto:reinhold@uji.es">cmartin</a> |
65 | 65 |
* |
66 | 66 |
*/ |
67 |
public class JNDynFieldComponent extends DelegatedJFieldComponent implements JDynFieldComponent, ListSelectionListener { |
|
67 |
public class JNDynFieldComponent extends DelegatedJFieldComponent implements JDynFieldComponent, ListSelectionListener, ValueChangedListener {
|
|
68 | 68 |
|
69 | 69 |
|
70 | 70 |
private static final int MINIMUM_LIST_SIZE = 5; |
71 | 71 |
|
72 |
private static final Object UNKNOWN = "unknown"; |
|
73 |
|
|
72 | 74 |
private JList list; |
73 | 75 |
|
74 | 76 |
private JButton sbutton; |
... | ... | |
96 | 98 |
*/ |
97 | 99 |
public JNDynFieldComponent(ValueField parent, DynField dynField) { |
98 | 100 |
super(parent,dynField); |
101 |
this.addValueChangedListener(this); |
|
99 | 102 |
} |
100 | 103 |
|
101 | 104 |
private void addElement(Object element) { |
102 |
items.add(element); |
|
103 |
this.list.setSelectedIndex(items.getModel().getSize()-1); |
|
105 |
Object[] values = this.getDynField().getElementsType().getAvailableValues(); |
|
106 |
if (values!=null) |
|
107 |
items.addElement(element, values[(Integer) element]); |
|
108 |
else if (this.getDynField().getElementsType().getType()==DataTypes.BOOLEAN) |
|
109 |
if (element == null) |
|
110 |
items.addElement(element, UNKNOWN); |
|
111 |
else |
|
112 |
items.addElement(element, element); |
|
113 |
else |
|
114 |
items.addElement(element, element); |
|
115 |
this.list.setSelectedIndex(items.getSize()-1); |
|
104 | 116 |
} |
105 | 117 |
|
118 |
private void setValue(Object element, int index) { |
|
119 |
Object[] values = this.getDynField().getElementsType().getAvailableValues(); |
|
120 |
if (element instanceof Integer){ |
|
121 |
int ind = (Integer) element; |
|
122 |
if ((values!=null)&&(ind>-1)) |
|
123 |
items.setValue(index, element, values[(Integer) element]); |
|
124 |
else |
|
125 |
items.setValue(index, element, element); |
|
126 |
}else if (this.getDynField().getElementsType().getType()==DataTypes.BOOLEAN) |
|
127 |
if (element == null) |
|
128 |
items.setValue(index, element, UNKNOWN); |
|
129 |
else |
|
130 |
items.setValue(index, element, element); |
|
131 |
else |
|
132 |
items.setValue(index, element, element); |
|
133 |
this.list.setSelectedIndex(index); |
|
134 |
} |
|
135 |
|
|
106 | 136 |
// private void addElement(int index, Object item, boolean addItemToInnerList) { |
107 | 137 |
// addItem(index,item); |
108 | 138 |
//// if (addItemToInnerList) |
... | ... | |
265 | 295 |
c.gridy = 0; |
266 | 296 |
c.ipady = 0; |
267 | 297 |
c.weightx = 0.0; // 0 |
268 |
c.fill = GridBagConstraints.BASELINE;
|
|
298 |
c.fill = GridBagConstraints.RELATIVE;
|
|
269 | 299 |
c.anchor = GridBagConstraints.PAGE_START; |
270 | 300 |
subPanel.add(sbutton,c); |
271 | 301 |
|
... | ... | |
331 | 361 |
* |
332 | 362 |
*/ |
333 | 363 |
private void initJList() { |
334 |
this.list = new JList(this.items.getModel());
|
|
364 |
this.list = new JList(this.items); |
|
335 | 365 |
this.list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); |
336 | 366 |
this.list.addListSelectionListener(this); |
337 |
if (this.items.getModel().getSize()>0)
|
|
367 |
if (this.items.getSize()>0) |
|
338 | 368 |
this.list.setSelectedIndex(0); |
339 | 369 |
} |
340 | 370 |
|
... | ... | |
356 | 386 |
public boolean isValid() { |
357 | 387 |
return this.component.isValid(); |
358 | 388 |
} |
359 |
|
|
389 |
|
|
360 | 390 |
/** |
361 | 391 |
* |
362 | 392 |
*/ |
363 | 393 |
private void populateItems(List items) { |
364 | 394 |
if (items == null) |
365 | 395 |
return; |
366 |
Object element; |
|
367 |
for (int i = 0; i < items.size(); i++) { |
|
368 |
element = items.get(i); |
|
369 |
this.items.add(element); |
|
370 |
} |
|
396 |
else |
|
397 |
this.items.setValue(items); |
|
371 | 398 |
// if (!items.isEmpty()) |
372 | 399 |
// this.list.setSelectedIndex(0); |
373 | 400 |
} |
374 | 401 |
|
375 | 402 |
public void refresh(){ |
376 |
if ((items.getModel().isEmpty())||(list.getSelectedIndex()<0)){
|
|
403 |
if ((items.isEmpty())||(list.getSelectedIndex()<0)){ |
|
377 | 404 |
this.sbutton.setEnabled(false); |
378 | 405 |
this.component.requestFocus(); |
379 | 406 |
}else |
... | ... | |
382 | 409 |
|
383 | 410 |
private void removeElement(int ind) { |
384 | 411 |
|
385 |
if ((ind>=0)&&(ind<this.items.getModel().getSize()))
|
|
412 |
if ((ind>=0)&&(ind<this.items.getSize())) |
|
386 | 413 |
removeItem(ind); |
387 | 414 |
|
388 |
if (items.getModel().getSize()<0)
|
|
415 |
if (items.getSize()<0) |
|
389 | 416 |
sbutton.setEnabled(false); |
390 | 417 |
else{ |
391 | 418 |
if (ind>0) |
... | ... | |
399 | 426 |
*/ |
400 | 427 |
private void removeItem(int ind) { |
401 | 428 |
// model.removeElement(model.get(ind)); |
402 |
this.items.removeItem(ind);
|
|
429 |
this.items.removeElement(ind);
|
|
403 | 430 |
} |
404 | 431 |
|
405 | 432 |
/* (non-Javadoc) |
... | ... | |
435 | 462 |
// for (int i=0;i<this.model.size();i++){ |
436 | 463 |
// this.items.addItem(i,this.model.get(i)); |
437 | 464 |
// } |
438 |
setFieldValue(this.items.toArray());
|
|
465 |
setFieldValue(this.items); |
|
439 | 466 |
} |
440 | 467 |
|
441 | 468 |
|
... | ... | |
472 | 499 |
@Override |
473 | 500 |
public void setValue(Object value) { |
474 | 501 |
if (value instanceof List){ |
475 |
populateItems((List) value);
|
|
502 |
this.items.setValue((List) value);
|
|
476 | 503 |
}else{ |
477 |
this.list.setSelectedValue(value, true);
|
|
504 |
this.list.setSelectedValue(value, true); |
|
478 | 505 |
} |
479 |
|
|
506 |
this.fireValueChangedEvent(); |
|
480 | 507 |
} |
481 | 508 |
|
482 | 509 |
|
... | ... | |
485 | 512 |
*/ |
486 | 513 |
public void valueChanged(ListSelectionEvent e) { |
487 | 514 |
if (list.getSelectedIndex()>=0){ |
488 |
this.component.setValue(this.items.getModel().getElementAt(list.getSelectedIndex()));
|
|
515 |
this.component.setValue(this.items.getElementAt(list.getSelectedIndex())); |
|
489 | 516 |
// this.list.setVisibleRowCount(model.getSize()); |
490 | 517 |
this.sbutton.setVisible(true); |
491 | 518 |
// this.listScrollPane.setVisible(true); |
492 | 519 |
}else{ |
493 |
if (this.items.getModel().getSize()<1){
|
|
520 |
if (this.items.getSize()<1){ |
|
494 | 521 |
// this.sbutton.setVisible(false); |
495 | 522 |
// this.listScrollPane.setVisible(false); |
496 | 523 |
}else{ |
497 |
int index =this.items.getModel().indexOf(this.items.getModel().firstElement());
|
|
524 |
int index =this.items.indexOf(this.items.firstElement());
|
|
498 | 525 |
if (index!=this.list.getSelectedIndex()) |
499 | 526 |
this.list.setSelectedIndex(index); |
500 | 527 |
} |
501 | 528 |
} |
502 | 529 |
refresh(); |
503 |
if (!isValid()) |
|
504 |
this.fireValueChangedEvent(); |
|
530 |
this.fireValueChangedEvent(); |
|
505 | 531 |
} |
506 | 532 |
|
533 |
/* (non-Javadoc) |
|
534 |
* @see org.gvsig.tools.swing.api.dynobject.ValueChangedListener#handleValueChanged(org.gvsig.tools.swing.api.dynobject.dynfield.JDynFieldComponent) |
|
535 |
*/ |
|
536 |
public void handleValueChanged(JDynFieldComponent field) { |
|
537 |
Object value = field.getValue(); |
|
538 |
int index = this.list.getSelectedIndex(); |
|
539 |
if (index>-1){ |
|
540 |
setValue(value,index); |
|
541 |
} |
|
542 |
} |
|
507 | 543 |
|
544 |
|
|
508 | 545 |
// /* (non-Javadoc) |
509 | 546 |
// * @see org.gvsig.tools.swing.spi.DelegatedJFieldComponent#getDynField() |
510 | 547 |
// */ |
Also available in: Unified diff