📄 datagloveconfigpanel.java
字号:
/* * File: DataGloveConfigPanel.java * Project: MPI Linguistic Application * Date: 02 May 2007 * * Copyright (C) 2001-2007 Max Planck Institute for Psycholinguistics * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */package mpi.eudico.client.annotator.timeseries.glove;import mpi.eudico.client.annotator.ElanLocale;import mpi.eudico.client.annotator.timeseries.AbstractTSTrack;import mpi.eudico.client.annotator.timeseries.ContinuousRateTSTrack;import mpi.eudico.client.annotator.timeseries.TimeSeriesChangeEvent;import mpi.eudico.client.annotator.timeseries.TimeSeriesChangeListener;import mpi.eudico.client.annotator.timeseries.TimeSeriesConstants;import mpi.eudico.client.annotator.timeseries.TimeSeriesTrack;import mpi.eudico.client.annotator.timeseries.TrackTableModel;import mpi.eudico.client.annotator.timeseries.config.SamplePosition;import mpi.eudico.client.annotator.timeseries.config.TSSourceConfiguration;import mpi.eudico.client.annotator.timeseries.config.TSTrackConfiguration;import mpi.eudico.client.annotator.timeseries.spi.TSConfigPanel;import mpi.eudico.client.annotator.util.ClientLogger;import java.awt.Color;import java.awt.Dimension;import java.awt.GridBagConstraints;import java.awt.GridBagLayout;import java.awt.Insets;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import java.io.IOException;import java.text.NumberFormat;import java.util.ArrayList;import java.util.Iterator;import java.util.Locale;import javax.swing.ButtonGroup;import javax.swing.JButton;import javax.swing.JColorChooser;import javax.swing.JComboBox;import javax.swing.JFormattedTextField;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JRadioButton;import javax.swing.JScrollPane;import javax.swing.JSpinner;import javax.swing.JTabbedPane;import javax.swing.JTable;import javax.swing.JTextField;import javax.swing.ListSelectionModel;import javax.swing.SpinnerNumberModel;import javax.swing.SwingConstants;import javax.swing.border.TitledBorder;import javax.swing.event.ChangeEvent;import javax.swing.event.ChangeListener;import javax.swing.event.ListSelectionEvent;import javax.swing.event.ListSelectionListener;/** * A configuration panel for the MPI dataglove file. * * @author Han Sloetjes */public class DataGloveConfigPanel extends TSConfigPanel implements ActionListener, ItemListener, ChangeListener, ListSelectionListener, ClientLogger { /** the add mode */ public static final int ADD = 0; /** the change mode */ public static final int CHANGE = 1; /** the delete mode */ public static final int DELETE = 2; private TSSourceConfiguration config; private ArrayList listeners; private DataGloveFileReader reader; private TSTrackConfiguration currentTrack; private ArrayList tracks; private int mode = ADD; // ui components private JLabel titleLabel; private JLabel sourceLabel; private JPanel tablePanel; private JTable trackTable; private JTabbedPane tabPane; private TrackTableModel model; // ui elements for edit panel private JPanel editPanel; private JLabel selectTrackLabel; private JComboBox currentTracksCB; private JLabel trackNameLabel; private JTextField trackNameTF; private JLabel trackDescLabel; private JTextField trackDescTF; private JLabel sampleLabel; private JPanel singleCellPanel; private JRadioButton singleCellRB; private JLabel rowLabel; private JSpinner rowSpinner; private SpinnerNumberModel rowSpinModel; private JLabel columnLabel; private JSpinner colSpinner; private SpinnerNumberModel colSpinModel; private JPanel multiCellPanel; private JRadioButton multiCellRB; private JButton multiCellButton; private JLabel rangeLabel; private JPanel rangePanel; private JRadioButton calcRangeRB; private JRadioButton manRangeRB; private JLabel minLabel; private JFormattedTextField minTF; private JLabel maxLabel; private JFormattedTextField maxTF; private JLabel deriveLabel; private JRadioButton deriv0RB; private JRadioButton deriv1RB; private JRadioButton deriv2RB; private JRadioButton deriv3RB; private JLabel unitLabel; private JTextField unitTF; private JLabel colorLabel; private JButton colorButton; // buttonpanel private JButton changeButton; private JPanel buttonPanel; /** * Creates a new DataGloveConfigPanel instance */ public DataGloveConfigPanel() { tracks = new ArrayList(); initComponents(); updateLocale(); updateForMode(); } private void initComponents() { setLayout(new GridBagLayout()); Insets insets = new Insets(2, 6, 2, 6); titleLabel = new JLabel(); titleLabel.setFont(titleLabel.getFont().deriveFont((float) 16)); titleLabel.setHorizontalAlignment(SwingConstants.CENTER); sourceLabel = new JLabel(); sourceLabel.setFont(titleLabel.getFont().deriveFont((float) 10)); sourceLabel.setHorizontalAlignment(SwingConstants.CENTER); tablePanel = new JPanel(); tablePanel.setLayout(new GridBagLayout()); model = new TrackTableModel(); trackTable = new JTable(model); trackTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); trackTable.getSelectionModel().addListSelectionListener(this); JScrollPane tableScrollPane = new JScrollPane(trackTable); Dimension size = new Dimension(500, 100); tableScrollPane.setMinimumSize(size); tableScrollPane.setPreferredSize(size); tabPane = new JTabbedPane(); GridBagConstraints gbc = new GridBagConstraints(); gbc.fill = GridBagConstraints.HORIZONTAL; gbc.anchor = GridBagConstraints.NORTH; gbc.insets = new Insets(6, 6, 6, 6); gbc.weightx = 1.0; add(titleLabel, gbc); gbc.gridy = 1; gbc.insets = insets; add(sourceLabel, gbc); gbc = new GridBagConstraints(); gbc.fill = GridBagConstraints.BOTH; gbc.anchor = GridBagConstraints.NORTHWEST; gbc.insets = insets; gbc.weightx = 1.0; gbc.weighty = 1.0; tablePanel.add(tableScrollPane, gbc); gbc = new GridBagConstraints(); gbc.gridy = 2; gbc.fill = GridBagConstraints.BOTH; gbc.anchor = GridBagConstraints.NORTHWEST; gbc.insets = insets; gbc.weightx = 1.0; gbc.weighty = 1.0; add(tablePanel, gbc); gbc = new GridBagConstraints(); gbc.gridy = 3; gbc.fill = GridBagConstraints.BOTH; gbc.anchor = GridBagConstraints.NORTHWEST; gbc.insets = new Insets(10, 6, 6, 6); gbc.weightx = 1.0; //gbc.weighty = 1.0; add(tabPane, gbc); // editpanel editPanel = new JPanel(new GridBagLayout()); selectTrackLabel = new JLabel(); currentTracksCB = new JComboBox(); currentTracksCB.addItemListener(this); trackNameLabel = new JLabel(); trackNameTF = new JTextField(); trackDescLabel = new JLabel(); trackDescTF = new JTextField(); sampleLabel = new JLabel(); singleCellPanel = new JPanel(new GridBagLayout()); singleCellRB = new JRadioButton(); singleCellRB.setSelected(true); rowLabel = new JLabel(); rowSpinModel = new SpinnerNumberModel(); rowSpinModel.setMinimum(new Integer(0)); rowSpinModel.setMaximum(new Integer(DataGloveConstants.MAX_NUM_ROWS - 1)); rowSpinner = new JSpinner(rowSpinModel); rowSpinner.addChangeListener(this); columnLabel = new JLabel(); colSpinModel = new SpinnerNumberModel(); colSpinModel.setMinimum(new Integer(0)); colSpinModel.setMaximum(new Integer(DataGloveConstants.COLS_PER_ROW[0] - 1)); colSpinner = new JSpinner(colSpinModel); multiCellPanel = new JPanel(new GridBagLayout()); multiCellRB = new JRadioButton(); multiCellRB.setEnabled(false); multiCellButton = new JButton(); multiCellButton.setEnabled(false); rangeLabel = new JLabel(); rangePanel = new JPanel(new GridBagLayout()); calcRangeRB = new JRadioButton(); calcRangeRB.addChangeListener(this); manRangeRB = new JRadioButton(); manRangeRB.setSelected(true); manRangeRB.addChangeListener(this); minLabel = new JLabel(); NumberFormat format = NumberFormat.getNumberInstance(Locale.ENGLISH); format.setParseIntegerOnly(false); minTF = new JFormattedTextField(format); maxLabel = new JLabel(); maxTF = new JFormattedTextField(format); deriveLabel = new JLabel(); deriv0RB = new JRadioButton("0"); deriv0RB.setSelected(true); deriv1RB = new JRadioButton("1"); deriv2RB = new JRadioButton("2"); deriv3RB = new JRadioButton("3"); unitLabel = new JLabel(); unitTF = new JTextField(); colorLabel = new JLabel(); colorButton = new JButton(); colorButton.setBackground(Color.GREEN); colorButton.addActionListener(this); // configure sub panels singleCellPanel.setBorder(new TitledBorder("")); ButtonGroup group1 = new ButtonGroup(); group1.add(singleCellRB); group1.add(multiCellRB); GridBagConstraints subgbc = new GridBagConstraints(); subgbc.gridwidth = 2; subgbc.anchor = GridBagConstraints.NORTHWEST; subgbc.insets = insets; subgbc.fill = GridBagConstraints.HORIZONTAL; subgbc.weightx = 1.0; singleCellPanel.add(singleCellRB, subgbc); subgbc.gridy = 1; subgbc.gridwidth = 1; subgbc.fill = GridBagConstraints.NONE; singleCellPanel.add(rowLabel, subgbc); subgbc.gridy = 2; singleCellPanel.add(columnLabel, subgbc); subgbc.gridy = 1; subgbc.gridx = 1; subgbc.fill = GridBagConstraints.HORIZONTAL; singleCellPanel.add(rowSpinner, subgbc); subgbc.gridy = 2; singleCellPanel.add(colSpinner, subgbc); multiCellPanel.setBorder(new TitledBorder("")); subgbc = new GridBagConstraints(); subgbc.anchor = GridBagConstraints.NORTHWEST; subgbc.insets = insets; subgbc.fill = GridBagConstraints.HORIZONTAL; subgbc.weightx = 1.0; multiCellPanel.add(multiCellRB, subgbc); subgbc.gridy = 2; multiCellPanel.add(multiCellButton, subgbc); rangePanel.setBorder(new TitledBorder("")); ButtonGroup group3 = new ButtonGroup(); group3.add(manRangeRB); group3.add(calcRangeRB); subgbc.gridy = 0; subgbc.gridwidth = 2; rangePanel.add(calcRangeRB, subgbc); subgbc.gridy = 1; rangePanel.add(manRangeRB, subgbc); subgbc.gridy = 2; subgbc.gridwidth = 1; subgbc.fill = GridBagConstraints.NONE; subgbc.weightx = 0.0; rangePanel.add(minLabel, subgbc); subgbc.gridy = 3; rangePanel.add(maxLabel, subgbc); subgbc.gridy = 2; subgbc.gridx = 1; subgbc.fill = GridBagConstraints.HORIZONTAL; subgbc.weightx = 0.5; subgbc.gridwidth = 1; rangePanel.add(minTF, subgbc); subgbc.gridy = 3; rangePanel.add(maxTF, subgbc); ButtonGroup group2 = new ButtonGroup(); group2.add(deriv0RB); group2.add(deriv1RB); group2.add(deriv2RB); group2.add(deriv3RB); // end subpanels GridBagConstraints lgbc = new GridBagConstraints(); lgbc.anchor = GridBagConstraints.NORTHWEST; lgbc.insets = insets; editPanel.add(selectTrackLabel, lgbc); GridBagConstraints rgbc = new GridBagConstraints(); rgbc.gridx = 1; rgbc.gridwidth = 4; rgbc.fill = GridBagConstraints.HORIZONTAL; rgbc.anchor = GridBagConstraints.NORTHWEST; rgbc.insets = insets; rgbc.weightx = 1.0; editPanel.add(currentTracksCB, rgbc); lgbc.gridy = 1; editPanel.add(trackNameLabel, lgbc); rgbc.gridy = 1; editPanel.add(trackNameTF, rgbc); lgbc.gridy = 2; editPanel.add(trackDescLabel, lgbc); rgbc.gridy = 2; editPanel.add(trackDescTF, rgbc); lgbc.gridy = 3; editPanel.add(sampleLabel, lgbc); rgbc.gridy = 3; rgbc.gridwidth = 2; editPanel.add(singleCellPanel, rgbc); rgbc.gridx = 3; editPanel.add(multiCellPanel, rgbc); lgbc.gridy = 4; editPanel.add(rangeLabel, lgbc); rgbc.gridx = 1; rgbc.gridwidth = 4; rgbc.gridy = 4; editPanel.add(rangePanel, rgbc); lgbc.gridy = 5; editPanel.add(deriveLabel, lgbc); rgbc.gridy = 5; rgbc.gridwidth = 1; editPanel.add(deriv0RB, rgbc); rgbc.gridx = 2; editPanel.add(deriv1RB, rgbc); rgbc.gridx = 3; editPanel.add(deriv2RB, rgbc); rgbc.gridx = 4; editPanel.add(deriv3RB, rgbc); lgbc.gridy = 6; editPanel.add(unitLabel, lgbc); rgbc.gridy = 6; rgbc.gridx = 1; rgbc.gridwidth = 1; editPanel.add(unitTF, rgbc); lgbc.gridy = 7; editPanel.add(colorLabel, lgbc); rgbc.gridy = 7; editPanel.add(colorButton, rgbc);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -