⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 multilanguagefield.java

📁 Rapla是一个灵活的多用户资源管理系统。它提供的一些功能有:日历GUI
💻 JAVA
字号:
/*--------------------------------------------------------------------------*
 | Copyright (C) 2006 Christopher Kohlhaas                                  |
 |                                                                          |
 | 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. A copy of the license has been included with   |
 | these distribution in the COPYING file, if not go to www.fsf.org         |
 |                                                                          |
 | As a special exception, you are granted the permissions to link this     |
 | program with every library, which license fulfills the Open Source       |
 | Definition as published by the Open Source Initiative (OSI).             |
 *--------------------------------------------------------------------------*/
package org.rapla.gui.internal.edit;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Collection;

import javax.swing.AbstractCellEditor;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.event.CellEditorListener;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.table.DefaultTableModel;

import org.rapla.entities.MultiLanguageName;
import org.rapla.framework.RaplaContext;
import org.rapla.framework.RaplaException;
import org.rapla.gui.toolkit.DialogUI;
import org.rapla.gui.toolkit.RaplaButton;

public class MultiLanguageField extends AbstractEditField implements ChangeListener, ActionListener,CellEditorListener {
    JPanel panel = new JPanel();
    TextField textField;
    RaplaButton button = new RaplaButton(RaplaButton.SMALL);
    MultiLanguageName name = new MultiLanguageName();
    MultiLanguageEditorDialog editorDialog;

    String[] availableLanguages;

    public MultiLanguageField(RaplaContext sm, String fieldName) throws RaplaException {
        super( sm);
        textField = new TextField(sm, "name");
        setFieldName(fieldName);
        availableLanguages = getRaplaLocale().getAvailableLanguages();
        panel.setLayout( new BorderLayout() );
        panel.add( textField.getComponent(), BorderLayout.CENTER );
        panel.add( button, BorderLayout.EAST );
        button.addActionListener( this );
        button.setIcon( getIcon("icon.language-select") );
        textField.addChangeListener( this );
    }

    public void requestFocus() {
        textField.getComponent().requestFocus();
    }

    public void stateChanged(ChangeEvent e) {
        if (name != null) {
            name.setName(getI18n().getLang()
                         ,(String)textField.getValue());
            fireContentChanged();
        }
    }

    public void actionPerformed(ActionEvent evt) {
        editorDialog = new MultiLanguageEditorDialog( button );
        editorDialog.addCellEditorListener( this );
        editorDialog.setEditorValue( name );
        try {
			editorDialog.show();
		} catch (RaplaException ex) {
			showException( ex, getComponent());
		}
    }

    public void editingStopped(ChangeEvent e) {
        setValue((MultiLanguageName) editorDialog.getEditorValue());
        fireContentChanged();
    }

    public void editingCanceled(ChangeEvent e) {
    }

    protected Object getValue() {
        return this.name;
    }

    protected void setValue(Object object) {
        this.name = (MultiLanguageName)object;
        textField.setValue(name.getName(getI18n().getLang()));
    }

    public void mapTo(Object object) {
        // Don't need to map back because MultiLanguageName is modified directly
    }
    
    public JComponent getComponent() {
        return panel;
    }

    class MultiLanguageEditorDialog extends AbstractCellEditor {
        private static final long serialVersionUID = 1L;

        JTable table = new JTable();
        JLabel label = new JLabel();
        JPanel comp = new JPanel();
        MultiLanguageName editorValue;
        Component owner;
        MultiLanguageEditorDialog(JComponent owner) {
            this.owner = owner;
            table.setPreferredScrollableViewportSize(new Dimension(300, 200));
            comp.setLayout(new BorderLayout());
            comp.add(label,BorderLayout.NORTH);
            comp.add(new JScrollPane(table),BorderLayout.CENTER);
        }

        public void setEditorValue(Object value) {
            this.editorValue = (MultiLanguageName)value;
            table.setModel(new TranslationTableModel(editorValue));
            table.getColumnModel().getColumn(0).setPreferredWidth(30);
            table.getColumnModel().getColumn(1).setPreferredWidth(200);
            label.setText(getI18n().format("translation.format", editorValue));
        }

        public Object getEditorValue() {
            return editorValue;
        }

        public Object getCellEditorValue() {
            return getEditorValue();
        }

        public void show() throws RaplaException {
            DialogUI dlg = DialogUI.create(getContext(),owner,true,comp,new String[] { getString("ok"),getString("cancel")});
            dlg.setTitle(getString("translation"));
            // Workaround for Bug ID  4480264 on developer.java.sun.com
            if (table.getRowCount() > 0 ) {
                table.editCellAt(0, 0);
                table.editCellAt(0, 1);
            }
            dlg.start();
            if (dlg.getSelectedIndex() == 0) {
                for (int i=0;i<availableLanguages.length;i++) {
                    String value = (String)table.getValueAt(i,1);
                    if (value != null)
                        editorValue.setName(availableLanguages[i],value);
                }
                if (table.isEditing()) {
                    if (table.getEditingColumn() == 1) {
                        JTextField textField = (JTextField) table.getEditorComponent();
                        int row = table.getEditingRow();
                        String value = textField.getText();
                        editorValue.setName(availableLanguages[row],value);
                    }
            }
                fireEditingStopped();
            } else {
                fireEditingCanceled();
            }
        }
    }

    class TranslationTableModel extends DefaultTableModel {
        private static final long serialVersionUID = 1L;

        public TranslationTableModel(MultiLanguageName name) {
            super();
            addColumn(getString("language"));
            addColumn(getString("translation"));
            Collection trans = name.getAvailableLanguages();
            for (int i=0;i<availableLanguages.length;i++) {
                String lang = availableLanguages[i];
                String[] row = new String[2];
                row[0] = lang;
                row[1] = trans.contains(lang) ? name.getName(lang): "";
                addRow(row);
            }
        }

        public boolean isCellEditable(int row, int col) {
            //Note that the data/cell address is constant,
            //no matter where the cell appears onscreen.
            if (col < 1) {
                return false;
            } else {
                return true;
            }
        }
    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -