2 * Rozšířené atributy – program na správu rozšířených atributů souborů
3 * Copyright © 2012 František Kučera (frantovo.cz)
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 package cz.frantovo.rozsireneatributy.gui;
19 import cz.frantovo.rozsireneatributy.Konfigurace;
20 import cz.frantovo.rozsireneatributy.Konfigurace.DefiniceAtributu;
21 import cz.frantovo.rozsireneatributy.Konfigurace.DefiniceHodnoty;
22 import java.awt.Component;
23 import java.awt.event.ActionEvent;
24 import java.awt.event.ActionListener;
25 import java.util.EventObject;
26 import java.util.Objects;
27 import javax.swing.JComboBox;
28 import javax.swing.JTable;
29 import javax.swing.event.CellEditorListener;
30 import javax.swing.event.ChangeEvent;
31 import javax.swing.event.EventListenerList;
32 import javax.swing.table.TableCellEditor;
33 import javax.swing.table.TableModel;
36 * Umožňuje výběr hodnoty atributu z předvoleného seznamu.
38 * @author Ing. František Kučera (frantovo.cz)
40 public class EditorHodnotAtributů
41 extends JComboBox<String>
42 implements TableCellEditor {
44 private final Konfigurace konfigurace;
45 private JTable tabulka;
46 private TableModel model;
49 protected EventListenerList posluchače = new EventListenerList();
50 protected ChangeEvent událost = new ChangeEvent(this);
52 public EditorHodnotAtributů(Konfigurace konfigurace) {
54 this.konfigurace = konfigurace;
56 addActionListener(new ActionListener() {
59 public void actionPerformed(ActionEvent e) {
60 fireEditiaceSkončila();
65 protected void fireEditiaceSkončila() {
66 for (Object posluchač : posluchače.getListenerList()) {
67 if (posluchač instanceof CellEditorListener) {
68 ((CellEditorListener) posluchač).editingStopped(událost);
73 protected void fireEditiaceZrušena() {
74 for (Object posluchač : posluchače.getListenerList()) {
75 if (posluchač instanceof CellEditorListener) {
76 ((CellEditorListener) posluchač).editingCanceled(událost);
81 private void obnovHodnoty(Object hodnotaAtributu) {
84 if (hodnotaAtributu == null) {
86 } else if (!(hodnotaAtributu instanceof String)) {
87 hodnotaAtributu = String.valueOf(hodnotaAtributu);
89 addItem((String) hodnotaAtributu);
90 setSelectedItem(hodnotaAtributu);
92 Object názevAtributu = model.getValueAt(řádek, Panel.SLOUPEC_NÁZVU);
93 for (DefiniceAtributu da : konfigurace.getAtributy()) {
94 if (Objects.equals(názevAtributu, da.getNázev())) {
95 for (DefiniceHodnoty dh : da.getHodnoty()) {
96 addItem(dh.getNázev());
104 public Component getTableCellEditorComponent(
112 this.sloupec = sloupec;
113 this.tabulka = tabulka;
114 this.model = tabulka.getModel();
115 obnovHodnoty(hodnota);
116 // TODO: více různých instancí?
121 public Object getCellEditorValue() {
122 return getSelectedItem();
126 public boolean isCellEditable(EventObject anEvent) {
131 public boolean shouldSelectCell(EventObject anEvent) {
136 public boolean stopCellEditing() {
137 fireEditiaceSkončila();
142 public void cancelCellEditing() {
143 fireEditiaceZrušena();
147 public void addCellEditorListener(CellEditorListener l) {
148 posluchače.add(CellEditorListener.class, l);
152 public void removeCellEditorListener(CellEditorListener l) {
153 posluchače.remove(CellEditorListener.class, l);