src/main/java/cz/frantovo/rozsireneatributy/gui/Panel.java
author František Kučera <franta-hg@frantovo.cz>
Sat, 16 Dec 2023 20:13:13 +0100
branchv_0
changeset 39 ec0e970e0830
parent 35 java/rozsirene-atributy/src/cz/frantovo/rozsireneatributy/gui/Panel.java@72ea1c6d836c
child 41 64e564c2f069
permissions -rw-r--r--
Make, Ant, Maven a Netbeans - různé způsoby sestavení aplikace
franta-hg@19
     1
/**
franta-hg@19
     2
 * Rozšířené atributy – program na správu rozšířených atributů souborů
franta-hg@19
     3
 * Copyright © 2012 František Kučera (frantovo.cz)
franta-hg@22
     4
 *
franta-hg@19
     5
 * This program is free software: you can redistribute it and/or modify
franta-hg@19
     6
 * it under the terms of the GNU General Public License as published by
franta-hg@27
     7
 * the Free Software Foundation, either version 3 of the License.
franta-hg@22
     8
 *
franta-hg@19
     9
 * This program is distributed in the hope that it will be useful,
franta-hg@19
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
franta-hg@22
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
franta-hg@19
    12
 * GNU General Public License for more details.
franta-hg@22
    13
 *
franta-hg@19
    14
 * You should have received a copy of the GNU General Public License
franta-hg@22
    15
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
franta-hg@19
    16
 */
franta-hg@28
    17
package cz.frantovo.rozsireneatributy.gui;
franta-hg@6
    18
franta-hg@28
    19
import cz.frantovo.rozsireneatributy.Atribut;
franta-hg@35
    20
import cz.frantovo.rozsireneatributy.CSV;
franta-hg@35
    21
import java.awt.Toolkit;
franta-hg@35
    22
import java.awt.datatransfer.StringSelection;
franta-hg@10
    23
import java.io.IOException;
franta-hg@35
    24
import java.io.StringWriter;
franta-hg@15
    25
import java.util.ResourceBundle;
franta-hg@10
    26
import java.util.logging.Level;
franta-hg@10
    27
import java.util.logging.Logger;
franta-hg@10
    28
import javax.swing.JOptionPane;
franta-hg@16
    29
import javax.swing.JTable;
franta-hg@16
    30
import javax.swing.ListSelectionModel;
franta-hg@10
    31
import javax.swing.event.ListSelectionEvent;
franta-hg@10
    32
import javax.swing.event.ListSelectionListener;
franta-hg@6
    33
franta-hg@6
    34
/**
franta-hg@30
    35
 * @author Ing. František Kučera (frantovo.cz)
franta-hg@6
    36
 */
franta-hg@6
    37
public class Panel extends javax.swing.JPanel {
franta-hg@6
    38
franta-hg@32
    39
	public static final int SLOUPEC_NÁZVU = 0;
franta-hg@32
    40
	public static final int SLOUPEC_HODNOTY = 1;
franta-hg@29
    41
	private static final Logger log = Logger
franta-hg@29
    42
		.getLogger(Panel.class.getSimpleName());
franta-hg@29
    43
	private static final ResourceBundle překlady = ResourceBundle
franta-hg@29
    44
		.getBundle(Atribut.class.getPackageName() + ".Překlady");
franta-hg@10
    45
	private Model model;
franta-hg@10
    46
	private Atribut vybranýAtribut;
franta-hg@16
    47
	private JTable tabulka;
franta-hg@6
    48
franta-hg@10
    49
	public Panel(Model model) {
franta-hg@6
    50
		this.model = model;
franta-hg@10
    51
		initComponents();
franta-hg@16
    52
franta-hg@30
    53
		tlačítkoZamknout.setEnabled(model.isZámekPodporovaný());
franta-hg@30
    54
		tlačítkoZamknout.setToolTipText(model.isZámekPodporovaný()
franta-hg@30
    55
			? překlady.getString("zamknout.popis")
franta-hg@30
    56
			: překlady.getString("chyba.lzeZamknoutJenSoubor"));
franta-hg@30
    57
franta-hg@16
    58
		tabulka = new JTable(model);
franta-hg@23
    59
		nastavEditor();
franta-hg@16
    60
		tabulka.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
franta-hg@16
    61
		posuvnýPanel.setViewportView(tabulka);
franta-hg@35
    62
franta-hg@33
    63
		tabulka.setRowHeight((int) (tabulka.getRowHeight() * 1.3));
franta-hg@33
    64
franta-hg@11
    65
		/** Výběr aktuálního atributu v tabulce */
franta-hg@29
    66
		tabulka.getSelectionModel().addListSelectionListener(
franta-hg@29
    67
			new ListSelectionListener() {
franta-hg@6
    68
franta-hg@22
    69
			@Override
franta-hg@10
    70
			public void valueChanged(ListSelectionEvent e) {
franta-hg@10
    71
				int řádek = tabulka.getSelectedRow();
franta-hg@10
    72
				if (řádek < 0) {
franta-hg@10
    73
					vybranýAtribut = null;
franta-hg@10
    74
					tlačítkoSmazat.setEnabled(false);
franta-hg@10
    75
				} else {
franta-hg@10
    76
					vybranýAtribut = getModel().getAtribut(řádek);
franta-hg@10
    77
					tlačítkoSmazat.setEnabled(true);
franta-hg@10
    78
				}
franta-hg@10
    79
			}
franta-hg@10
    80
		});
franta-hg@10
    81
	}
franta-hg@10
    82
franta-hg@23
    83
	private void nastavEditor() {
franta-hg@29
    84
		tabulka.getColumnModel().getColumn(SLOUPEC_NÁZVU)
franta-hg@31
    85
			.setCellEditor(new EditorNázvůAtributů(model.getKonfigurace()));
franta-hg@32
    86
		tabulka.getColumnModel().getColumn(SLOUPEC_HODNOTY)
franta-hg@32
    87
			.setCellEditor(new EditorHodnotAtributů(model.getKonfigurace()));
franta-hg@23
    88
	}
franta-hg@23
    89
franta-hg@10
    90
	private Model getModel() {
franta-hg@10
    91
		return model;
franta-hg@10
    92
	}
franta-hg@10
    93
franta-hg@23
    94
	public void setModel(Model model) {
franta-hg@23
    95
		this.model = model;
franta-hg@23
    96
		tabulka.setModel(model);
franta-hg@23
    97
		nastavEditor();
franta-hg@23
    98
	}
franta-hg@23
    99
franta-hg@10
   100
	private void zobrazChybovouHlášku(String hláška, Throwable chyba) {
franta-hg@30
   101
		JOptionPane.showMessageDialog(this, hláška + "\n"
franta-hg@30
   102
			+ chyba.getLocalizedMessage(),
franta-hg@30
   103
			překlady.getString("chyba.titulek"), JOptionPane.ERROR_MESSAGE);
franta-hg@10
   104
		log.log(Level.WARNING, hláška, chyba);
franta-hg@10
   105
	}
franta-hg@35
   106
	
franta-hg@35
   107
	private void kopírujDoSchránky() {
franta-hg@35
   108
		try {
franta-hg@35
   109
			StringWriter výstup = new StringWriter();
franta-hg@35
   110
			CSV csv = new CSV(výstup);
franta-hg@35
   111
franta-hg@35
   112
			csv.hodnota(překlady.getString("tabulka.název").toLowerCase());
franta-hg@35
   113
			csv.hodnota(překlady.getString("tabulka.hodnota").toLowerCase());
franta-hg@35
   114
			csv.konecŘádku();
franta-hg@35
   115
franta-hg@35
   116
			for (int i = 0; i < model.getRowCount(); i++) {
franta-hg@35
   117
				csv.hodnota(String.valueOf(model.getValueAt(i, 0)));
franta-hg@35
   118
				csv.hodnota(String.valueOf(model.getValueAt(i, 1)));
franta-hg@35
   119
				csv.konecŘádku();
franta-hg@35
   120
			}
franta-hg@35
   121
franta-hg@35
   122
			Toolkit.getDefaultToolkit().getSystemClipboard().setContents(
franta-hg@35
   123
				new StringSelection(výstup.toString()),
franta-hg@35
   124
				null
franta-hg@35
   125
			);
franta-hg@35
   126
		} catch (Exception e) {
franta-hg@35
   127
			zobrazChybovouHlášku(překlady
franta-hg@35
   128
				.getString("chyba.nepodařiloSeZkopírovat"), e);
franta-hg@35
   129
		}
franta-hg@35
   130
	}
franta-hg@10
   131
franta-hg@10
   132
	@SuppressWarnings("unchecked")
franta-hg@6
   133
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
franta-hg@6
   134
    private void initComponents() {
franta-hg@6
   135
franta-hg@10
   136
        posuvnýPanel = new javax.swing.JScrollPane();
franta-hg@10
   137
        tlačítkoPřidat = new javax.swing.JButton();
franta-hg@10
   138
        tlačítkoSmazat = new javax.swing.JButton();
franta-hg@10
   139
        tlačítkoZnovuNačíst = new javax.swing.JButton();
franta-hg@30
   140
        tlačítkoZamknout = new javax.swing.JToggleButton();
franta-hg@35
   141
        tlačítkoKopírovat = new javax.swing.JButton();
franta-hg@6
   142
franta-hg@11
   143
        tlačítkoPřidat.setMnemonic('p');
franta-hg@28
   144
        java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("cz/frantovo/rozsireneatributy/Překlady"); // NOI18N
franta-hg@15
   145
        tlačítkoPřidat.setText(bundle.getString("přidatAtribut")); // NOI18N
franta-hg@10
   146
        tlačítkoPřidat.addActionListener(new java.awt.event.ActionListener() {
franta-hg@10
   147
            public void actionPerformed(java.awt.event.ActionEvent evt) {
franta-hg@10
   148
                tlačítkoPřidatActionPerformed(evt);
franta-hg@10
   149
            }
franta-hg@10
   150
        });
franta-hg@10
   151
franta-hg@11
   152
        tlačítkoSmazat.setMnemonic('s');
franta-hg@15
   153
        tlačítkoSmazat.setText(bundle.getString("smazatAtribut")); // NOI18N
franta-hg@10
   154
        tlačítkoSmazat.setEnabled(false);
franta-hg@10
   155
        tlačítkoSmazat.addActionListener(new java.awt.event.ActionListener() {
franta-hg@10
   156
            public void actionPerformed(java.awt.event.ActionEvent evt) {
franta-hg@10
   157
                tlačítkoSmazatActionPerformed(evt);
franta-hg@10
   158
            }
franta-hg@10
   159
        });
franta-hg@10
   160
franta-hg@11
   161
        tlačítkoZnovuNačíst.setMnemonic('z');
franta-hg@15
   162
        tlačítkoZnovuNačíst.setText(bundle.getString("znovuNačíst")); // NOI18N
franta-hg@10
   163
        tlačítkoZnovuNačíst.addActionListener(new java.awt.event.ActionListener() {
franta-hg@10
   164
            public void actionPerformed(java.awt.event.ActionEvent evt) {
franta-hg@10
   165
                tlačítkoZnovuNačístActionPerformed(evt);
franta-hg@10
   166
            }
franta-hg@10
   167
        });
franta-hg@6
   168
franta-hg@30
   169
        tlačítkoZamknout.setText(bundle.getString("zamknout")); // NOI18N
franta-hg@30
   170
        tlačítkoZamknout.addActionListener(new java.awt.event.ActionListener() {
franta-hg@30
   171
            public void actionPerformed(java.awt.event.ActionEvent evt) {
franta-hg@30
   172
                tlačítkoZamknoutActionPerformed(evt);
franta-hg@30
   173
            }
franta-hg@30
   174
        });
franta-hg@30
   175
franta-hg@35
   176
        tlačítkoKopírovat.setText(bundle.getString("schránka.kopírovat")); // NOI18N
franta-hg@35
   177
        tlačítkoKopírovat.addActionListener(new java.awt.event.ActionListener() {
franta-hg@35
   178
            public void actionPerformed(java.awt.event.ActionEvent evt) {
franta-hg@35
   179
                tlačítkoKopírovatActionPerformed(evt);
franta-hg@35
   180
            }
franta-hg@35
   181
        });
franta-hg@35
   182
franta-hg@6
   183
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
franta-hg@6
   184
        this.setLayout(layout);
franta-hg@6
   185
        layout.setHorizontalGroup(
franta-hg@6
   186
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
franta-hg@10
   187
            .addGroup(layout.createSequentialGroup()
franta-hg@10
   188
                .addContainerGap()
franta-hg@10
   189
                .addComponent(tlačítkoPřidat)
franta-hg@10
   190
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
franta-hg@10
   191
                .addComponent(tlačítkoSmazat)
franta-hg@10
   192
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
franta-hg@10
   193
                .addComponent(tlačítkoZnovuNačíst)
franta-hg@30
   194
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
franta-hg@30
   195
                .addComponent(tlačítkoZamknout)
franta-hg@35
   196
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
franta-hg@35
   197
                .addComponent(tlačítkoKopírovat)
franta-hg@35
   198
                .addContainerGap(25, Short.MAX_VALUE))
franta-hg@11
   199
            .addComponent(posuvnýPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 543, Short.MAX_VALUE)
franta-hg@6
   200
        );
franta-hg@6
   201
        layout.setVerticalGroup(
franta-hg@6
   202
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
franta-hg@10
   203
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
franta-hg@10
   204
                .addComponent(posuvnýPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 277, Short.MAX_VALUE)
franta-hg@10
   205
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
franta-hg@10
   206
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
franta-hg@10
   207
                    .addComponent(tlačítkoPřidat)
franta-hg@10
   208
                    .addComponent(tlačítkoSmazat)
franta-hg@30
   209
                    .addComponent(tlačítkoZnovuNačíst)
franta-hg@35
   210
                    .addComponent(tlačítkoZamknout)
franta-hg@35
   211
                    .addComponent(tlačítkoKopírovat))
franta-hg@10
   212
                .addContainerGap())
franta-hg@6
   213
        );
franta-hg@6
   214
    }// </editor-fold>//GEN-END:initComponents
franta-hg@6
   215
franta-hg@10
   216
	private void tlačítkoPřidatActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tlačítkoPřidatActionPerformed
franta-hg@10
   217
		model.přidejAtribut(new Atribut());
franta-hg@10
   218
	}//GEN-LAST:event_tlačítkoPřidatActionPerformed
franta-hg@6
   219
franta-hg@10
   220
	private void tlačítkoSmazatActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tlačítkoSmazatActionPerformed
franta-hg@10
   221
		try {
franta-hg@10
   222
			model.odeberAtribut(vybranýAtribut);
franta-hg@10
   223
		} catch (IOException e) {
franta-hg@29
   224
			zobrazChybovouHlášku(překlady
franta-hg@29
   225
				.getString("chyba.nepodařiloSeSmazat"), e);
franta-hg@10
   226
		}
franta-hg@10
   227
	}//GEN-LAST:event_tlačítkoSmazatActionPerformed
franta-hg@10
   228
franta-hg@10
   229
	private void tlačítkoZnovuNačístActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tlačítkoZnovuNačístActionPerformed
franta-hg@10
   230
		try {
franta-hg@10
   231
			model.načtiAtributy();
franta-hg@10
   232
		} catch (IOException e) {
franta-hg@29
   233
			zobrazChybovouHlášku(překlady
franta-hg@29
   234
				.getString("chyba.nepodařiloSeNačíst"), e);
franta-hg@10
   235
		}
franta-hg@10
   236
	}//GEN-LAST:event_tlačítkoZnovuNačístActionPerformed
franta-hg@30
   237
franta-hg@30
   238
    private void tlačítkoZamknoutActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tlačítkoZamknoutActionPerformed
franta-hg@35
   239
		try {
franta-hg@30
   240
			model.nastavZámek(tlačítkoZamknout.isSelected());
franta-hg@30
   241
		} catch (Exception e) {
franta-hg@30
   242
			zobrazChybovouHlášku(překlady
franta-hg@30
   243
				.getString("chyba.nepodařiloSeNastavitZámek"), e);
franta-hg@30
   244
		}
franta-hg@30
   245
    }//GEN-LAST:event_tlačítkoZamknoutActionPerformed
franta-hg@30
   246
franta-hg@35
   247
    private void tlačítkoKopírovatActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tlačítkoKopírovatActionPerformed
franta-hg@35
   248
		kopírujDoSchránky();
franta-hg@35
   249
    }//GEN-LAST:event_tlačítkoKopírovatActionPerformed
franta-hg@35
   250
franta-hg@6
   251
    // Variables declaration - do not modify//GEN-BEGIN:variables
franta-hg@10
   252
    private javax.swing.JScrollPane posuvnýPanel;
franta-hg@35
   253
    private javax.swing.JButton tlačítkoKopírovat;
franta-hg@10
   254
    private javax.swing.JButton tlačítkoPřidat;
franta-hg@10
   255
    private javax.swing.JButton tlačítkoSmazat;
franta-hg@30
   256
    private javax.swing.JToggleButton tlačítkoZamknout;
franta-hg@10
   257
    private javax.swing.JButton tlačítkoZnovuNačíst;
franta-hg@6
   258
    // End of variables declaration//GEN-END:variables
franta-hg@6
   259
}