Как описано здесь: http://www.wikihow.com/Calculate-the-Area-of-a-Polygon
import pandas as pd
df = pd.DataFrame({'x': [10, 20, 20, 30, 20, 10, 0], 'y': [-10, -10, -10, 0, 10, 30, 20]})
df = df.append(df.loc[0])
first_product = (df['x'].shift(1) * df['y']).fillna(0).sum()
second_product = (df['y'].shift(1) * df['x']).fillna(0).sum()
(first_product - second_product) / 2
600
Исправлена таблица столбцов делает большую часть того, что вам нужно.
Он не поддерживает изменение размера фиксированного столбца, поэтому вам нужно добавить код типа:
MouseAdapter ma = new MouseAdapter()
{
TableColumn column;
int columnWidth;
int pressedX;
public void mousePressed(MouseEvent e)
{
JTableHeader header = (JTableHeader)e.getComponent();
TableColumnModel tcm = header.getColumnModel();
int columnIndex = tcm.getColumnIndexAtX( e.getX() );
Cursor cursor = header.getCursor();
if (columnIndex == tcm.getColumnCount() - 1
&& cursor == Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR))
{
column = tcm.getColumn( columnIndex );
columnWidth = column.getWidth();
pressedX = e.getX();
header.addMouseMotionListener( this );
}
}
public void mouseReleased(MouseEvent e)
{
JTableHeader header = (JTableHeader)e.getComponent();
header.removeMouseMotionListener( this );
}
public void mouseDragged(MouseEvent e)
{
int width = columnWidth - pressedX + e.getX();
column.setPreferredWidth( width );
JTableHeader header = (JTableHeader)e.getComponent();
JTable table = header.getTable();
table.setPreferredScrollableViewportSize(table.getPreferredSize());
JScrollPane scrollPane = (JScrollPane)table.getParent().getParent();
scrollPane.revalidate();
}
};
JTable fixed = fixedColumnTable.getFixedTable();
fixed.getTableHeader().addMouseListener( ma );
Проверьте этот класс, извлеченный из http://fahdshariff.blogspot.sg/2010/02/freezing-columns-in-jtable.html
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JViewport;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableModel;
public class FrozenTablePane extends JScrollPane{
public FrozenTablePane(JTable table, int colsToFreeze){
super(table);
TableModel model = table.getModel();
//create a frozen model
TableModel frozenModel = new DefaultTableModel(
model.getRowCount(),
colsToFreeze);
//populate the frozen model
for (int i = 0; i < model.getRowCount(); i++) {
for (int j = 0; j < colsToFreeze; j++) {
String value = (String) model.getValueAt(i, j);
frozenModel.setValueAt(value, i, j);
}
}
//create frozen table
JTable frozenTable = new JTable(frozenModel);
//remove the frozen columns from the original table
for (int j = 0; j < colsToFreeze; j++) {
table.removeColumn(table.getColumnModel().getColumn(0));
} table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
//format the frozen table
JTableHeader header = table.getTableHeader();
frozenTable.setBackground(header.getBackground());
frozenTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
frozenTable.setEnabled(false);
//set frozen table as row header view
JViewport viewport = new JViewport();
viewport.setView(frozenTable);
viewport.setPreferredSize(frozenTable.getPreferredSize());
setRowHeaderView(viewport);
setCorner(JScrollPane.UPPER_LEFT_CORNER,
frozenTable.getTableHeader());
}
}
После этого просто вызовите метод конструктора:
JTable table = new JTable( <yourData>, <yourColumns> );
FrozenTablePane frozenPane = new FrozenTablePane(table,1);//where 1 is the number of freezed column(s)
JScrollPane имеет определенную область для этого, заголовок строки (см. диаграмму в API :)
Все, что вам нужно сделать, это: - создать дополнительный JTable для эта фиксированная область - подключите ее к первому столбцу вашей модели данных - установите ее как заголовок строки, а в основной таблице опустите или удалите первый столбец данных.
Когда прокрутка прокручивается вверх и вниз, обе таблицы будут синхронизироваться без добавления кода. Когда прокрутка прокручивается по горизонтали, заголовок строки всегда остается видимым, и прокручивается только основная таблица.
В большинстве случаев только добавленный код, который вам понадобится, предназначен для изменения размера столбца, например, примера camickr.
Я думаю, что ты на правильном пути. То, что вы концептуально представляете, - это таблица со столбцом заголовка для каждой строки. Я бы использовал две таблицы: у одного есть столбец «самый левый», а другой - все остальные. Затем я представляю их в JSplitPane с левой таблицей слева, а остальные справа. Была бы единственная вертикальная полоса прокрутки, которая контролировала смещение y обеих таблиц и одну горизонтальную полосу прокрутки, управляющую правой панелью (только).
Вы также можете использовать расширенные функции JScrollPane для установки ' заголовок "слева от основной области прокрутки. Я никогда не делал этого, но вы могли бы использовать это как «заголовки» ваших строк.