Java 在分页中传递JTable的行值

Java 在分页中传递JTable的行值,java,swing,pagination,jtable,Java,Swing,Pagination,Jtable,我有如下表格。一页显示30条记录。如果我点击第二页的第二行。getSeletedRow()传递值“2”,而不是“34”。如何实现 public class InvestTable extends JFrame { JTable myTable; JLabel total; JButton update,print,delete,search,search2,search3,export; String tablename = "investment"; JPanel p,panel; MyTa

我有如下表格。一页显示30条记录。如果我点击第二页的第二行。getSeletedRow()传递值“2”,而不是“34”。如何实现

public class InvestTable extends JFrame
{

JTable myTable;
JLabel total;
JButton update,print,delete,search,search2,search3,export;
String tablename = "investment";
JPanel p,panel;
MyTableModel tm;
JScrollPane myPane;
ImageIcon img = new ImageIcon("Images\\investment.png");
Connection con;
Statement stat,st;
TableModel model;
DefaultTableModel model1;
TableRowSorter<MyTableModel> sorter;
ResultSet rs, result;
private String tot;
private int pageSize = 10;
Box box = Box.createHorizontalBox();    
Box box1 = Box.createHorizontalBox();   
ForRadioButtonUI ui = new ForRadioButtonUI();

InvestTable() throws SQLException
{
   super("Investment Table");
   update = new JButton("Update");
   print = new JButton("Print");
   search = new JButton("Search By Date");
   search2 = new JButton("Search By Name");
   search3 = new JButton("Search By Invest Type");
   export = new JButton("Export");
   total = new JLabel("");
   delete = new JButton("Delete");
   p = new JPanel(null);
   panel = new JPanel(null);
   tm = new MyTableModel(tablename);              
   myTable = new JTable(tm);
   model = myTable.getModel();
   sorter = new TableRowSorter<MyTableModel> (tm);
   myTable.setRowSorter(sorter);
   showPages(30, 1);   ------------------>   // METHOD FOR PAGINATION
   myTable.setIntercellSpacing(new Dimension());
   myTable.setModel(tm);
   myPane = new JScrollPane(myTable, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
   myTable.setSelectionForeground(Color.black);
   myTable.setSelectionBackground(Color.green);
   myTable.setAlignmentX(CENTER_ALIGNMENT);
   myTable.setAlignmentY(CENTER_ALIGNMENT);
   myTable. setPreferredSize(new Dimension(800,482));
   myTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
   total.setFont(new Font("Arial", Font.BOLD, 16));          
   p.setPreferredSize(new Dimension(1024, 700));

   panel.setBounds(810,10,200,768);
   myPane.setBounds(0,0,800,505);
   update.setBounds(10,10,100,30);
   print.setBounds(10,50,100,30);
   search.setBounds(10,90,180,30);
   search2.setBounds(10,130,180,30);
   search3.setBounds(10,170,180,30);
   export.setBounds(10,210,100,30);
   delete.setBounds(10,250,100,30);
   box.setBounds(20, 520, 800, 30);
   total.setBounds(50, 550, 300, 30);

   p.add(myPane);       
   panel.add(update);
   panel.add(print);
   panel.add(export);
   panel.add(delete);
   p.add(panel);
   p.add(box);
   p.add(total);


   delete.addActionListener(new ActionListener()
   {
      @Override
      public void actionPerformed(ActionEvent e)
      {
         int rowToDelete = myTable.getSelectedRow();
         System.out.println(rowToDelete);
         tm.deleteRow(rowToDelete);
         myTable.setEditingRow(rowToDelete -1);
         myTable.setRowSelectionInterval(rowToDelete -1,rowToDelete -1);
      }
   });

    this.addWindowListener(new WindowAdapter()
   {
      @Override
      public void windowClosing(WindowEvent e)
      {
         dispose();
      }
   }); // end windowlistener

   this.setContentPane(p);
   this.setBounds(0, 0, 1024, 700);
   this.setVisible(true);
   this.setResizable(false);
   this.pack();
   this.setLocationRelativeTo(null);
   this.setIconImage(img.getImage());
   this.setFocusableWindowState(true);
} </code>
公共类投资表扩展JFrame
{
JTable-myTable;
JLabel总数;
JButton更新、打印、删除、搜索、搜索2、搜索3、导出;
String tablename=“投资”;
JPanel p,专家组;
MyTableModelTM;
JScrollPane-myPane;
ImageIcon img=新的ImageIcon(“Images\\investment.png”);
连接con;
声明统计,st;
表格模型;
DefaultTableModel1;
台式分拣机;
结果集rs,结果;
私人字符串tot;
私有int pageSize=10;
Box=Box.createHorizontalBox();
Box-box1=Box.createHorizontalBox();
ForRadioButtonUI=新的ForRadioButtonUI();
InvestTable()引发SQLException
{
超级(“投资表”);
更新=新的JButton(“更新”);
打印=新按钮(“打印”);
搜索=新按钮(“按日期搜索”);
search2=新的JButton(“按名称搜索”);
search3=新的JButton(“按投资类型搜索”);
导出=新的JButton(“导出”);
总计=新的JLabel(“”);
delete=新的JButton(“delete”);
p=新JPanel(空);
panel=newjpanel(空);
tm=新的MyTableModel(tablename);
myTable=新的JTable(tm);
model=myTable.getModel();
分拣机=新的表格行分拣机(tm);
myTable.setRowSorter(分拣机);
showPages(30,1);------------------------------->//分页方法
myTable.setIntercellSpacing(新维度());
myTable.setModel(tm);
myPane=新的JScrollPane(myTable,JScrollPane.VERTICAL\u SCROLLBAR\u AS\u NEEDED,JScrollPane.HORIZONTAL\u SCROLLBAR\u NEEDED);
myTable.setSelectionForeground(颜色:黑色);
myTable.setSelectionBackground(颜色:绿色);
myTable.setAlignmentX(中心对齐);
myTable.setAlignmentY(中心对齐);
myTable.setPreferredSize(新维度(800482));
myTable.setSelectionMode(ListSelectionModel.SINGLE_选择);
total.setFont(新字体(“Arial”,Font.BOLD,16));
p、 setPreferredSize(新维度(1024700));
立根盘(810,10200768);
myPane.setBounds(0,080055);
更新.立根数(10,10100,30);
打印.立根(10,50100,30);
搜索.挫折(10,90180,30);;
搜索2.挫折(10130180,30);
搜索3.挫折(10170180,30);
出口.挫折(10210100,30);
删除.立根(10250100,30);
盒.立根(20520800,30);
总数.立根数(50550300,30);
p、 添加(myPane);
面板。添加(更新);
面板。添加(打印);
新增(出口);
面板。添加(删除);
p、 添加(面板);
p、 添加(框);
p、 加(总数);
delete.addActionListener(新ActionListener()
{
@凌驾
已执行的公共无效操作(操作事件e)
{
int rowtodelet=myTable.getSelectedRow();
System.out.println(rowtodelet);
tm.deleteRow(rowToDelete);
myTable.setEditingRow(rowToDelete-1);
setRowSelectionInterval(rowToDelete-1,rowToDelete-1);
}
});
this.addWindowListener(新的WindowAdapter()
{
@凌驾
公共无效窗口关闭(WindowEvent e)
{
处置();
}
});//结束windowlistener
这个.setContentPane(p);
这个.setBounds(0,0,1024700);
此.setVisible(true);
此参数为.setresizeable(false);
这个包();
此.setLocationRelativeTo(空);
this.setIconImage(img.getImage());
此.setFocusableWindowsState(true);
}
这是分页的代码

 private void showPages(final int itemsPerPage, final int currentPageIndex) 
 {
           sorter.setRowFilter(filter(itemsPerPage, currentPageIndex - 1));
           ArrayList list = new ArrayList();

           int startPageIndex = currentPageIndex - pageSize;
           if (startPageIndex <= 0)
                   startPageIndex = 1;
           int maxPageIndex = (model.getRowCount() / itemsPerPage) + 1;
           int endPageIndex = currentPageIndex + pageSize - 1;
           if (endPageIndex > maxPageIndex)
                   endPageIndex = maxPageIndex;

           if (currentPageIndex > 1)   list.add(createRadioButtons(itemsPerPage, currentPageIndex - 1, "<<< Prev"));
           for (int i = startPageIndex; i <= endPageIndex; i++)  list.add(createLinks(itemsPerPage, currentPageIndex, i - 1));
           if (currentPageIndex < maxPageIndex)     list.add(createRadioButtons(itemsPerPage, currentPageIndex + 1, "Next >>>"));
           box.removeAll();
           ButtonGroup bg = new ButtonGroup();
           box.add(Box.createHorizontalGlue());
           for (Iterator it = list.iterator(); it.hasNext();) 
           {
               JRadioButton r = (JRadioButton) it.next();
               box.add( r);
               bg.add( r);
           }
           box.add(Box.createHorizontalGlue());
           box.revalidate();
           box.repaint();
           list.clear();
   }

private JRadioButton createLinks(final int itemsPerPage, final int current,  final int target) 
{
           JRadioButton radio = new JRadioButton("" + (target + 1))
           {
                   @Override
                   protected void fireStateChanged() 
                   {
                           ButtonModel bmodel = getModel();
                           if (!bmodel.isEnabled())                                 
                           {
                                   setForeground(Color.GRAY);
                           } 
                           else if (bmodel.isPressed() && bmodel.isArmed()) 
                           {
                                   setForeground(Color.GREEN);
                           } 
                           else if (bmodel.isSelected()) 
                           {
                                   setForeground(Color.RED);
                           }
                           super.fireStateChanged();
                   }
           };
           radio.setForeground(Color.BLUE);
           radio.setUI(ui);
           if (target + 1 == current) 
           {
                   radio.setSelected(true);
           }
           radio.addActionListener(new ActionListener() 
           {
                   @Override
                   public void actionPerformed(ActionEvent e) 
                   {
                           showPages(itemsPerPage, target + 1);
                   }
           });
           return radio;
   }

private JRadioButton createRadioButtons(final int itemsPerPage, final int target, String title) 
{
           JRadioButton radio = new JRadioButton(title);
           radio.setForeground(Color.BLUE);
           radio.setUI(ui);
           radio.addActionListener(new ActionListener() 
           {
                   @Override
                   public void actionPerformed(ActionEvent e) 
                   {
                           showPages(itemsPerPage, target);
                   }
           });
           return radio;
   }

@SuppressWarnings("rawtypes")
private RowFilter filter(final int itemsPerPage,  final int target) 
{
        return new RowFilter() 
        {
                @Override
                public boolean include( RowFilter.Entry entry) 
                {
                        int ei = (int) entry.getIdentifier();
                        return (target * itemsPerPage <= ei && ei < target  * itemsPerPage + itemsPerPage);
                }
        };
}  

private static class ForRadioButtonUI extends BasicRadioButtonUI
{

    public ForRadioButtonUI() 
    {
    }
    @Override
    public Icon getDefaultIcon() 
    {
            return null;
    }

    private static Dimension size = new Dimension();
    private static final Rectangle rec1 = new Rectangle();
    private static final Rectangle rec2 = new Rectangle();
    private static final Rectangle rec3 = new Rectangle();

    @Override
    public synchronized void paint(Graphics g, JComponent c) 
    {
            AbstractButton b = (AbstractButton) c;
            ButtonModel bmodel = b.getModel();
            Font f = c.getFont();
            g.setFont(f);
            FontMetrics fm = c.getFontMetrics(f);

            Insets i = c.getInsets();
            size = b.getSize(size);
            rec1.x = i.left;
            rec1.y = i.top;
            rec1.width = size.width - (i.right + rec1.x);
            rec1.height = size.height - (i.bottom + rec1.y);
            rec2.x = rec2.y = rec2.width = rec2.height = 0;
            rec3.x = rec3.y = rec3.width = rec3.height = 0;

            String text = SwingUtilities.layoutCompoundLabel(c, fm, b.getText(), null, b.getVerticalAlignment(), b.getHorizontalAlignment(), b .getVerticalTextPosition(), 
                                            b.getHorizontalTextPosition(), rec1, rec2, rec3, 0);

            if (c.isOpaque()) 
            {
                    g.setColor(b.getBackground());
                    g.fillRect(0, 0, size.width, size.height);
            }
            if (text == null)
                    return;
            g.setColor(b.getForeground());
            if (!bmodel.isSelected() && !bmodel.isPressed() && !bmodel.isArmed()  && b.isRolloverEnabled() && bmodel.isRollover()) 
            {
                    g.drawLine(rec1.x, rec1.y + rec1.height, rec1.x + rec1.width,  rec1.y + rec1.height);
            }
            View v = (View) c.getClientProperty(BasicHTML.propertyKey);
            if (v != null) 
            {
                    v.paint(g, rec3);
            } 
            else 
            {
                    paintText(g, b, rec3, text);
            }
       }
}

private static class ForRadioButtonUI extends BasicRadioButtonUI
{

    public ForRadioButtonUI() 
    {
    }
    @Override
    public Icon getDefaultIcon() 
    {
            return null;
    }

    private static Dimension size = new Dimension();
    private static final Rectangle rec1 = new Rectangle();
    private static final Rectangle rec2 = new Rectangle();
    private static final Rectangle rec3 = new Rectangle();

    @Override
    public synchronized void paint(Graphics g, JComponent c) 
    {
            AbstractButton b = (AbstractButton) c;
            ButtonModel bmodel = b.getModel();
            Font f = c.getFont();
            g.setFont(f);
            FontMetrics fm = c.getFontMetrics(f);

            Insets i = c.getInsets();
            size = b.getSize(size);
            rec1.x = i.left;
            rec1.y = i.top;
            rec1.width = size.width - (i.right + rec1.x);
            rec1.height = size.height - (i.bottom + rec1.y);
            rec2.x = rec2.y = rec2.width = rec2.height = 0;
            rec3.x = rec3.y = rec3.width = rec3.height = 0;

            String text = SwingUtilities.layoutCompoundLabel(c, fm, b.getText(), null, b.getVerticalAlignment(), b.getHorizontalAlignment(), b .getVerticalTextPosition(), 
                                            b.getHorizontalTextPosition(), rec1, rec2, rec3, 0);

            if (c.isOpaque()) 
            {
                    g.setColor(b.getBackground());
                    g.fillRect(0, 0, size.width, size.height);
            }
            if (text == null)
                    return;
            g.setColor(b.getForeground());
            if (!bmodel.isSelected() && !bmodel.isPressed() && !bmodel.isArmed()  && b.isRolloverEnabled() && bmodel.isRollover()) 
            {
                    g.drawLine(rec1.x, rec1.y + rec1.height, rec1.x + rec1.width,  rec1.y + rec1.height);
            }
            View v = (View) c.getClientProperty(BasicHTML.propertyKey);
            if (v != null) 
            {
                    v.paint(g, rec3);
            } 
            else 
            {
                    paintText(g, b, rec3, text);
            }
       }
}
private void showPages(final int itemsPerPage,final int currentPageIndex)
{
setRowFilter(过滤器(itemsPerPage,currentPageIndex-1));
ArrayList=新建ArrayList();
int startPageIndex=currentPageIndex-pageSize;
if(startPageIndex maxPageIndex)
endPageIndex=maxPageIndex;
if(currentPageIndex>1)list.add(createRadioButtons(itemsPerPage,currentPageIndex-1,“>”);
box.removeAll();
ButtonGroup bg=新建ButtonGroup();
添加(box.createHorizontalGlue());
for(Iterator it=list.Iterator();it.hasNext();)
{
JRadioButton r=(JRadioButton)it.next();
框。添加(r);
bg.add(r);
}
添加(box.createHorizontalGlue());
box.revalidate();
box.repaint();
list.clear();
}
私有JRadioButton createLinks(最终整型ItemsPage、最终整型current、最终整型target)
{
JRadioButton radio=新的JRadioButton(“+(目标+1))
{
@凌驾
受保护的无效fireStateChanged()
{
ButtonModel bmodel=getModel();
如果(!bmodel.isEnabled())
{
设置前景(颜色:灰色);
} 
else if(bmodel.isPressed()和&bmodel.isArmed())
{
设置前景(颜色为绿色);
} 
else if(bmodel.isSelected())
{
设置前景(颜色为红色);
}
super.fireStateChanged();
}
};
收音机。设置前景(颜色。蓝色);
radio.setUI(ui);
如果(目标+1==当前)
{
radio.setSelected(正确);
}
radio.addActionListener(新ActionListener()
{
@凌驾
已执行的公共无效操作(操作事件e)
{
显示页面(itemsPerPage,目标+1);
}
});
回程无线电;
}
私有JRadioButton createRadioButtons(f
myTable.convertRowIndexToModel(myTable.getSelectedRow());