/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ package de.cismet.tools.gui; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.text.ParseException; /** * DOCUMENT ME! * * @author jruiz * @version $Revision$, $Date$ */ public class PaginationPanel extends javax.swing.JPanel { //~ Instance fields -------------------------------------------------------- final ActionListener actionListener; private int pageSize = 100; private int page = 1; private long total = -1; // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton btnBack; private javax.swing.JButton btnFirst; private javax.swing.JButton btnForward; private javax.swing.JButton btnLast; private javax.swing.JButton btnRefresh; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel6; private javax.swing.JPanel jPanel5; private javax.swing.JSeparator jSeparator2; private javax.swing.JSeparator jSeparator3; private javax.swing.JLabel lblPage; private javax.swing.JLabel lblPageTotal; private javax.swing.JLabel lblRowsTotal; private javax.swing.JPanel panPaginationControl; private javax.swing.JPanel panPaginationPages; private javax.swing.JFormattedTextField tfPageSize; // End of variables declaration//GEN-END:variables //~ Constructors ----------------------------------------------------------- /** * Creates a new PaginationPanel object. */ public PaginationPanel() { this(null); } /** * Creates new form PaginationPanel. * * @param actionListener DOCUMENT ME! */ public PaginationPanel(final ActionListener actionListener) { initComponents(); this.actionListener = actionListener; } //~ Methods ---------------------------------------------------------------- /** * 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. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { java.awt.GridBagConstraints gridBagConstraints; panPaginationControl = new javax.swing.JPanel(); btnRefresh = new javax.swing.JButton(); btnFirst = new javax.swing.JButton(); btnBack = new javax.swing.JButton(); btnForward = new javax.swing.JButton(); btnLast = new javax.swing.JButton(); panPaginationPages = new javax.swing.JPanel(); jLabel1 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); lblRowsTotal = new javax.swing.JLabel(); jSeparator2 = new javax.swing.JSeparator(); jLabel4 = new javax.swing.JLabel(); lblPage = new javax.swing.JLabel(); jLabel6 = new javax.swing.JLabel(); lblPageTotal = new javax.swing.JLabel(); tfPageSize = new javax.swing.JFormattedTextField(); jPanel5 = new javax.swing.JPanel(); jSeparator3 = new javax.swing.JSeparator(); setLayout(new java.awt.GridBagLayout()); panPaginationControl.setMinimumSize(new java.awt.Dimension(145, 10)); panPaginationControl.setPreferredSize(new java.awt.Dimension(145, 10)); panPaginationControl.setLayout(new java.awt.GridBagLayout()); btnRefresh.setIcon(new javax.swing.ImageIcon( getClass().getResource("/de/cismet/tools/gui/arrow-circle-double.png"))); // NOI18N org.openide.awt.Mnemonics.setLocalizedText( btnRefresh, org.openide.util.NbBundle.getMessage(PaginationPanel.class, "PaginationPanel.btnRefresh.text")); // NOI18N btnRefresh.setToolTipText(org.openide.util.NbBundle.getMessage( PaginationPanel.class, "PaginationPanel.btnRefresh.toolTipText")); // NOI18N btnRefresh.setBorderPainted(false); btnRefresh.setContentAreaFilled(false); btnRefresh.setEnabled(false); btnRefresh.setMaximumSize(new java.awt.Dimension(29, 29)); btnRefresh.setMinimumSize(new java.awt.Dimension(29, 29)); btnRefresh.setPreferredSize(new java.awt.Dimension(29, 29)); btnRefresh.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(final java.awt.event.ActionEvent evt) { btnRefreshActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; panPaginationControl.add(btnRefresh, gridBagConstraints); btnFirst.setIcon(new javax.swing.ImageIcon( getClass().getResource("/de/cismet/tools/gui/control-stop-180.png"))); // NOI18N btnFirst.setToolTipText(org.openide.util.NbBundle.getMessage( PaginationPanel.class, "PaginationPanel.btnFirst.toolTipText")); // NOI18N btnFirst.setBorderPainted(false); btnFirst.setContentAreaFilled(false); btnFirst.setEnabled(false); btnFirst.setMaximumSize(new java.awt.Dimension(29, 29)); btnFirst.setMinimumSize(new java.awt.Dimension(29, 29)); btnFirst.setPreferredSize(new java.awt.Dimension(29, 29)); btnFirst.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(final java.awt.event.ActionEvent evt) { btnFirstActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; panPaginationControl.add(btnFirst, gridBagConstraints); btnBack.setIcon(new javax.swing.ImageIcon(getClass().getResource("/de/cismet/tools/gui/control-180.png"))); // NOI18N org.openide.awt.Mnemonics.setLocalizedText( btnBack, org.openide.util.NbBundle.getMessage(PaginationPanel.class, "PaginationPanel.btnBack.text")); // NOI18N btnBack.setToolTipText(org.openide.util.NbBundle.getMessage( PaginationPanel.class, "PaginationPanel.btnBack.toolTipText")); // NOI18N btnBack.setBorderPainted(false); btnBack.setContentAreaFilled(false); btnBack.setEnabled(false); btnBack.setMaximumSize(new java.awt.Dimension(29, 29)); btnBack.setMinimumSize(new java.awt.Dimension(29, 29)); btnBack.setPreferredSize(new java.awt.Dimension(29, 29)); btnBack.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(final java.awt.event.ActionEvent evt) { btnBackActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; panPaginationControl.add(btnBack, gridBagConstraints); btnForward.setIcon(new javax.swing.ImageIcon(getClass().getResource("/de/cismet/tools/gui/control.png"))); // NOI18N btnForward.setToolTipText(org.openide.util.NbBundle.getMessage( PaginationPanel.class, "PaginationPanel.btnForward.toolTipText")); // NOI18N btnForward.setBorderPainted(false); btnForward.setContentAreaFilled(false); btnForward.setEnabled(false); btnForward.setMaximumSize(new java.awt.Dimension(29, 29)); btnForward.setMinimumSize(new java.awt.Dimension(29, 29)); btnForward.setPreferredSize(new java.awt.Dimension(29, 29)); btnForward.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(final java.awt.event.ActionEvent evt) { btnForwardActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; panPaginationControl.add(btnForward, gridBagConstraints); btnLast.setIcon(new javax.swing.ImageIcon(getClass().getResource("/de/cismet/tools/gui/control-stop.png"))); // NOI18N btnLast.setToolTipText(org.openide.util.NbBundle.getMessage( PaginationPanel.class, "PaginationPanel.btnLast.toolTipText")); // NOI18N btnLast.setBorderPainted(false); btnLast.setContentAreaFilled(false); btnLast.setEnabled(false); btnLast.setMaximumSize(new java.awt.Dimension(29, 29)); btnLast.setMinimumSize(new java.awt.Dimension(29, 29)); btnLast.setPreferredSize(new java.awt.Dimension(29, 29)); btnLast.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(final java.awt.event.ActionEvent evt) { btnLastActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; panPaginationControl.add(btnLast, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; add(panPaginationControl, gridBagConstraints); panPaginationPages.setLayout(new java.awt.GridBagLayout()); org.openide.awt.Mnemonics.setLocalizedText( jLabel1, org.openide.util.NbBundle.getMessage(PaginationPanel.class, "PaginationPanel.jLabel1.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 5); panPaginationPages.add(jLabel1, gridBagConstraints); org.openide.awt.Mnemonics.setLocalizedText( jLabel2, org.openide.util.NbBundle.getMessage(PaginationPanel.class, "PaginationPanel.jLabel2.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 3; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 5); panPaginationPages.add(jLabel2, gridBagConstraints); org.openide.awt.Mnemonics.setLocalizedText( lblRowsTotal, org.openide.util.NbBundle.getMessage(PaginationPanel.class, "PaginationPanel.lblRowsTotal.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 4; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; panPaginationPages.add(lblRowsTotal, gridBagConstraints); jSeparator2.setOrientation(javax.swing.SwingConstants.VERTICAL); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 5); panPaginationPages.add(jSeparator2, gridBagConstraints); org.openide.awt.Mnemonics.setLocalizedText( jLabel4, org.openide.util.NbBundle.getMessage(PaginationPanel.class, "PaginationPanel.jLabel4.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 5; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.insets = new java.awt.Insets(0, 15, 0, 5); panPaginationPages.add(jLabel4, gridBagConstraints); org.openide.awt.Mnemonics.setLocalizedText( lblPage, org.openide.util.NbBundle.getMessage(PaginationPanel.class, "PaginationPanel.lblPage.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 6; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; panPaginationPages.add(lblPage, gridBagConstraints); org.openide.awt.Mnemonics.setLocalizedText( jLabel6, org.openide.util.NbBundle.getMessage(PaginationPanel.class, "PaginationPanel.jLabel6.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 7; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 5); panPaginationPages.add(jLabel6, gridBagConstraints); org.openide.awt.Mnemonics.setLocalizedText( lblPageTotal, org.openide.util.NbBundle.getMessage(PaginationPanel.class, "PaginationPanel.lblPageTotal.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 8; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; panPaginationPages.add(lblPageTotal, gridBagConstraints); tfPageSize.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory( new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("#0")))); tfPageSize.setMinimumSize(new java.awt.Dimension(50, 27)); tfPageSize.setPreferredSize(new java.awt.Dimension(50, 27)); tfPageSize.setValue(50L); tfPageSize.addKeyListener(new java.awt.event.KeyAdapter() { @Override public void keyPressed(final java.awt.event.KeyEvent evt) { tfPageSizeKeyPressed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; panPaginationPages.add(tfPageSize, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; add(panPaginationPages, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 3; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; add(jPanel5, gridBagConstraints); jSeparator3.setOrientation(javax.swing.SwingConstants.VERTICAL); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 5); add(jSeparator3, gridBagConstraints); } // </editor-fold>//GEN-END:initComponents /** * DOCUMENT ME! * * @param evt DOCUMENT ME! */ private void btnForwardActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_btnForwardActionPerformed doPagination(getPage() + 1); } //GEN-LAST:event_btnForwardActionPerformed /** * DOCUMENT ME! * * @param evt DOCUMENT ME! */ private void btnLastActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_btnLastActionPerformed doPagination(getLastPage()); } //GEN-LAST:event_btnLastActionPerformed /** * DOCUMENT ME! * * @param evt DOCUMENT ME! */ private void btnFirstActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_btnFirstActionPerformed doPagination(getFirstPage()); } //GEN-LAST:event_btnFirstActionPerformed /** * DOCUMENT ME! * * @param evt DOCUMENT ME! */ private void btnBackActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_btnBackActionPerformed doPagination(getPage() - 1); } //GEN-LAST:event_btnBackActionPerformed /** * DOCUMENT ME! * * @param evt DOCUMENT ME! */ private void btnRefreshActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_btnRefreshActionPerformed refresh(); } //GEN-LAST:event_btnRefreshActionPerformed @Override public void setEnabled(final boolean enabled) { super.setEnabled(enabled); btnBack.setEnabled(enabled); btnFirst.setEnabled(enabled); btnForward.setEnabled(enabled); btnLast.setEnabled(enabled); btnRefresh.setEnabled(enabled); tfPageSize.setEditable(enabled); } /** * DOCUMENT ME! * * @param evt DOCUMENT ME! */ private void tfPageSizeKeyPressed(final java.awt.event.KeyEvent evt) { //GEN-FIRST:event_tfPageSizeKeyPressed if (evt.getKeyCode() == KeyEvent.VK_ENTER) { try { tfPageSize.commitEdit(); refresh(); } catch (final ParseException ex) { } } } //GEN-LAST:event_tfPageSizeKeyPressed /** * DOCUMENT ME! */ private void refresh() { doPagination(getPage()); } /** * DOCUMENT ME! * * @param page DOCUMENT ME! */ private void setPage(int page) { setPageSize(((Long)tfPageSize.getValue()).intValue()); if (page > getLastPage()) { page = getLastPage(); } if (page < getFirstPage()) { page = 1; } this.page = page; updateGuiElements(); } /** * DOCUMENT ME! * * @param page DOCUMENT ME! */ private void doPagination(final int page) { setPage(page); if (actionListener != null) { actionListener.actionPerformed(new ActionEvent(this, -1, null)); } } /** * DOCUMENT ME! */ private void updateGuiElements() { lblPage.setText(Integer.toString(page)); lblRowsTotal.setText(Long.toString(total)); lblPageTotal.setText(Integer.toString(getLastPage())); tfPageSize.setText(Integer.toString(pageSize)); btnFirst.setEnabled(isEnabled() && (getTotal() > 0) && (page != getFirstPage())); btnLast.setEnabled(isEnabled() && (getTotal() > 0) && (page != getLastPage())); btnBack.setEnabled(isEnabled() && (getTotal() > 0) && (page > getFirstPage())); btnForward.setEnabled(isEnabled() && (getTotal() > 0) && (page < getLastPage())); btnRefresh.setEnabled(isEnabled() && (getTotal() > 0)); } /** * DOCUMENT ME! */ public void reset() { setPage(0); } /** * DOCUMENT ME! * * @param pageSize DOCUMENT ME! */ private void setPageSize(final int pageSize) { this.pageSize = pageSize; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public int getPageSize() { return pageSize; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public int getPage() { return page; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public long getTotal() { return total; } /** * DOCUMENT ME! * * @param total DOCUMENT ME! */ public void setTotal(final long total) { this.total = total; setPage(getPage()); } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ private int getFirstPage() { return 1; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ private int getLastPage() { if (pageSize > 0) { return (int)Math.ceil(total / (double)pageSize); } else { return 0; } } }