Java 在分页中传递JTable的行值
我有如下表格。一页显示30条记录。如果我点击第二页的第二行。getSeletedRow()传递值“2”,而不是“34”。如何实现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
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());