📄 jticketlines.java
字号:
// Tina POS is a point of sales application designed for touch screens.// Copyright (C) 2005 Adrian Romero Corchado.// http://sourceforge.net/projects/tinapos//// 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 USApackage net.adrianromero.tpv.panelsales;import java.awt.Component;import java.awt.Dimension;import java.awt.Rectangle;import java.io.IOException;import java.io.StringReader;import java.util.ArrayList;import javax.swing.JLabel;import javax.swing.JTable;import javax.swing.ListSelectionModel;import javax.swing.event.ListSelectionListener;import javax.swing.table.AbstractTableModel;import javax.swing.table.DefaultTableCellRenderer;import javax.swing.table.TableColumnModel;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import net.adrianromero.scripting.ScriptEngine;import net.adrianromero.scripting.ScriptException;import net.adrianromero.scripting.ScriptFactory;import net.adrianromero.tpv.forms.AppLocal;import net.adrianromero.tpv.forms.AppView;import net.adrianromero.tpv.forms.DataLogicSystem;import net.adrianromero.tpv.ticket.TicketLineInfo;import org.apache.velocity.VelocityContext;import org.xml.sax.Attributes;import org.xml.sax.InputSource;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;public class JTicketLines extends javax.swing.JPanel { private static SAXParser m_sp = null; private TicketTableModel m_jTableModel; /** Creates new form JLinesTicket */ public JTicketLines(AppView oApp) { initComponents(); ColumnTicket[] acolumns = new ColumnTicket[0]; String sTicketLine = oApp.lookupDataLogic(DataLogicSystem.class).getResourceAsXML("Ticket.Line"); if (sTicketLine != null) { try { if (m_sp == null) { SAXParserFactory spf = SAXParserFactory.newInstance(); m_sp = spf.newSAXParser(); } ColumnsHandler columnshandler = new ColumnsHandler(); m_sp.parse(new InputSource(new StringReader(sTicketLine)), columnshandler); acolumns = columnshandler.getColumns(); } catch (ParserConfigurationException ePC) { System.out.println("Error en el analizador XML. Consulte con su administrador"); } catch (SAXException eSAX) { System.out.println("El archivo no es un documento XML valido. Error de analisis."); } catch (IOException eIO) { System.out.println("Error al leer el archivo. Consulte con su administrador."); } } // la tabla. m_jTableModel = new TicketTableModel(oApp, acolumns);// for (int i = 0; i < m_acolumns.length; i++) {// m_jTableModel.addColumn(AppLocal.getIntString(m_acolumns[i].name)); // } m_jTicketTable.setModel(m_jTableModel); m_jTicketTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); TableColumnModel jColumns = m_jTicketTable.getColumnModel(); for (int i = 0; i < acolumns.length; i++) { jColumns.getColumn(i).setPreferredWidth(acolumns[i].width); jColumns.getColumn(i).setResizable(false); } m_jScrollTableTicket.getVerticalScrollBar().setPreferredSize(new Dimension(35, 35)); m_jTicketTable.getTableHeader().setReorderingAllowed(false); m_jTicketTable.setDefaultRenderer(Object.class, new TicketCellRenderer(acolumns)); m_jTicketTable.setRowHeight(40); m_jTicketTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // reseteo la tabla... m_jTableModel.clear(); } public void addListSelectionListener(ListSelectionListener l) { m_jTicketTable.getSelectionModel().addListSelectionListener(l); } public void removeListSelectionListener(ListSelectionListener l) { m_jTicketTable.getSelectionModel().removeListSelectionListener(l); } public void clearTicketLines() { m_jTableModel.clear(); } public void setTicketLine(int index, TicketLineInfo oLine){ m_jTableModel.setRow(index, oLine); } public void addTicketLine(TicketLineInfo oLine) { m_jTableModel.addRow(oLine); // Selecciono la que acabamos de anadir. setSelectedIndex(m_jTableModel.getRowCount() - 1); } public void insertTicketLine(int index, TicketLineInfo oLine) { m_jTableModel.insertRow(index, oLine); // Selecciono la que acabamos de anadir. setSelectedIndex(index); } public void removeTicketLine(int i){ m_jTableModel.removeRow(i); // Escojo una a seleccionar if (i >= m_jTableModel.getRowCount()) { i = m_jTableModel.getRowCount() - 1; } if ((i >= 0) && (i < m_jTableModel.getRowCount())) { // Solo seleccionamos si podemos. setSelectedIndex(i); } } public void setSelectedIndex(int i){ // Seleccionamos m_jTicketTable.getSelectionModel().setSelectionInterval(i, i); // Hacemos visible la seleccion. Rectangle oRect = m_jTicketTable.getCellRect(i, 0, true); m_jTicketTable.scrollRectToVisible(oRect); } public int getSelectedIndex() { return m_jTicketTable.getSelectionModel().getMinSelectionIndex(); // solo sera uno, luego no importa... } public void selectionDown() { int i = m_jTicketTable.getSelectionModel().getMaxSelectionIndex(); if (i < 0){ i = 0; // No hay ninguna seleccionada } else { i ++; if (i >= m_jTableModel.getRowCount()) { i = m_jTableModel.getRowCount() - 1; } } if ((i >= 0) && (i < m_jTableModel.getRowCount())) { // Solo seleccionamos si podemos. setSelectedIndex(i); } } public void selectionUp() { int i = m_jTicketTable.getSelectionModel().getMinSelectionIndex(); if (i < 0){ i = m_jTableModel.getRowCount() - 1; // No hay ninguna seleccionada } else { i --; if (i < 0) { i = 0; } } if ((i >= 0) && (i < m_jTableModel.getRowCount())) { // Solo seleccionamos si podemos. setSelectedIndex(i); } } private static class TicketCellRenderer extends DefaultTableCellRenderer { private ColumnTicket[] m_acolumns; public TicketCellRenderer(ColumnTicket[] acolumns) { m_acolumns = acolumns; } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column){ JLabel aux = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); aux.setVerticalAlignment(javax.swing.SwingConstants.TOP); aux.setHorizontalAlignment(m_acolumns[column].align); return aux; } } private static class TicketTableModel extends AbstractTableModel { private AppView m_App; private ColumnTicket[] m_acolumns; private ArrayList m_rows = new ArrayList(); public TicketTableModel(AppView app, ColumnTicket[] acolumns) { m_App = app; m_acolumns = acolumns; } public int getRowCount() { return m_rows.size(); } public int getColumnCount() { return m_acolumns.length; } public String getColumnName(int column) { return AppLocal.getIntString(m_acolumns[column].name); // return m_acolumns[column].name; } public Object getValueAt(int row, int column) { return ((String[]) m_rows.get(row))[column]; } public boolean isCellEditable(int row, int column) { return false; } public void clear() { int old = getRowCount(); if (old > 0) { m_rows.clear(); fireTableRowsDeleted(0, old - 1); } } public void setRow(int index, TicketLineInfo oLine){ String[] row = (String []) m_rows.get(index); for (int i = 0; i < m_acolumns.length; i++) { try { ScriptEngine script = ScriptFactory.getScriptEngine(ScriptFactory.VELOCITY); script.put("ticketline", oLine); row[i] = script.eval(m_acolumns[i].value).toString(); } catch (ScriptException e) { row[i] = null; } fireTableCellUpdated(index, i); } } public void addRow(TicketLineInfo oLine) { insertRow(m_rows.size(), oLine); } public void insertRow(int index, TicketLineInfo oLine) { String[] row = new String[m_acolumns.length]; for (int i = 0; i < m_acolumns.length; i++) { try { ScriptEngine script = ScriptFactory.getScriptEngine(ScriptFactory.VELOCITY); script.put("ticketline", oLine); row[i] = script.eval(m_acolumns[i].value).toString(); } catch (ScriptException e) { row[i] = null; } } m_rows.add(index, row); fireTableRowsInserted(index, index); } public void removeRow(int row) { m_rows.remove(row); fireTableRowsDeleted(row, row); } } private static class ColumnsHandler extends DefaultHandler { private ArrayList m_columns = null; public ColumnTicket[] getColumns() { return (ColumnTicket[]) m_columns.toArray(new ColumnTicket[m_columns.size()]); } public void startDocument() throws SAXException { m_columns = new ArrayList(); } public void endDocument() throws SAXException {} public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException{ if ("column".equals(qName)){ ColumnTicket c = new ColumnTicket(); c.name = attributes.getValue("name"); c.width = Integer.parseInt(attributes.getValue("width")); String sAlign = attributes.getValue("align"); if ("right".equals(sAlign)) { c.align = javax.swing.SwingConstants.RIGHT; } else if ("center".equals(sAlign)) { c.align = javax.swing.SwingConstants.CENTER; } else { c.align = javax.swing.SwingConstants.LEFT; } c.value = attributes.getValue("value"); m_columns.add(c); } } public void endElement(String uri, String localName, String qName) throws SAXException {} public void characters(char[] ch, int start, int length) throws SAXException {} } private static class ColumnTicket { public String name; public int width; public int align; public String value; } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents private void initComponents() { m_jScrollTableTicket = new javax.swing.JScrollPane(); m_jTicketTable = new javax.swing.JTable(); setLayout(new java.awt.BorderLayout()); m_jScrollTableTicket.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); m_jScrollTableTicket.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); m_jTicketTable.setFocusable(false); m_jTicketTable.setIntercellSpacing(new java.awt.Dimension(0, 1)); m_jTicketTable.setRequestFocusEnabled(false); m_jTicketTable.setShowVerticalLines(false); m_jScrollTableTicket.setViewportView(m_jTicketTable); add(m_jScrollTableTicket, java.awt.BorderLayout.CENTER); }// </editor-fold>//GEN-END:initComponents // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JScrollPane m_jScrollTableTicket; private javax.swing.JTable m_jTicketTable; // End of variables declaration//GEN-END:variables }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -