📄 planetstablemodel.java
字号:
package net.sf.jawp.gui.client.data;
import java.awt.Color;
import java.awt.Component;
import java.awt.Rectangle;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.swing.JProgressBar;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
import net.sf.jawp.api.domain.Planet;
import net.sf.jawp.api.domain.Rules;
import net.sf.jawp.client.GameData;
import net.sf.jawp.gui.client.ColorsHelper;
/**
* Sortable table model of planets.
*
* @author jarek
* @version $Revision$
*
*/
public class PlanetsTableModel extends SortingTableModel<Planet>
{
/**
*
*/
private static final long serialVersionUID = 1L;
private final GameData gameDatamanager;
private Planet selectedPlanet;
public PlanetsTableModel(final GameData datamanager)
{
super();
gameDatamanager = datamanager;
}
@Override
protected List<SortableColumn<Planet>> createColumns()
{
final ArrayList<SortableColumn<Planet>> result = new ArrayList<SortableColumn<Planet>>(
6);
result.add(new PlanetNameColumn());
result.add(new PlanetOwnerColumn());
result.add(new PlanetFleetSizeColumn());
result.add(new PlanetProductivityColumn());
result.add(new PlanetProductionColumn());
result.add(new PlanetDistanceColumn());
return result;
}
@Override
protected Collection<Planet> retrieveObjects()
{
return this.gameDatamanager.getVisiblePlanets();
}
private final class PlanetNameColumn extends DefaultSortableColumn<Planet>
{
public String getName()
{
return "name";
}
public Object getValue(final Planet entity)
{
return entity.getName();
}
public int compare(final Planet o1, final Planet o2)
{
return o1.getName().compareTo(o2.getName());
}
}
private final class PlanetProductivityColumn extends
DefaultSortableColumn<Planet>
{
public String getName()
{
return "productivity";
}
public Object getValue(final Planet entity)
{
return entity.getProductivity();
}
public int compare(final Planet o1, final Planet o2)
{
return Float.compare(o1.getProductivity(), o2.getProductivity());
}
}
private final class PlanetOwnerColumn extends DefaultSortableColumn<Planet>
{
public String getName()
{
return "owner";
}
public Object getValue(final Planet entity)
{
return entity;
}
public int compare(final Planet o1, final Planet o2)
{
final String a1 = o1.getOwner().getEntity(
gameDatamanager.getRealmResolver()).getName();
final String a2 = o2.getOwner().getEntity(
gameDatamanager.getRealmResolver()).getName();
return a1.compareTo(a2);
}
public boolean hasChanged(final Planet old, final Planet newObject)
{
return true;
}
public TableCellRenderer getCellRenderer()
{
return new OwnerRenderer(gameDatamanager);
}
}
private final class PlanetFleetSizeColumn extends
DefaultSortableColumn<Planet>
{
public String getName()
{
return "fleet";
}
public Object getValue(final Planet entity)
{
return entity;
}
public int compare(final Planet o1, final Planet o2)
{
return o1.getHomeFleetSize() - o2.getHomeFleetSize();
}
public boolean hasChanged(final Planet old, final Planet newObject)
{
return true;
}
public TableCellRenderer getCellRenderer()
{
return new FleetSizeRenderer(gameDatamanager);
}
}
private final class PlanetProductionColumn extends
DefaultSortableColumn<Planet>
{
public String getName()
{
return "production";
}
public Object getValue(final Planet entity)
{
return entity;
}
public int compare(final Planet o1, final Planet o2)
{
return Float.compare(o1.getProduced(), o2.getProduced());
}
public boolean hasChanged(final Planet old, final Planet newObject)
{
return true;
}
/**
* {@inheritDoc}
*/
@Override
public TableCellRenderer getCellRenderer()
{
return new ProductionRenderer();
}
}
private class PlanetDistanceColumn extends DefaultSortableColumn<Planet>
{
public String getName()
{
return "distance";
}
public Object getValue(final Planet entity)
{
if (getSelectedPlanet() != null)
{
return gameDatamanager.convertDistToString(entity
.calcDistance(getSelectedPlanet()));
}
else
{
return entity.getCoords().toString();
}
}
public int compare(final Planet o1, final Planet o2)
{
if (getSelectedPlanet() != null)
{
final double dist1 = o1.calcDistance(getSelectedPlanet());
final double dist2 = o2.calcDistance(getSelectedPlanet());
return Double.compare(dist1, dist2);
}
else
{
return 0;
}
}
public boolean hasChanged(final Planet old, final Planet newObject)
{
return false;
}
}
public void refresh(final Collection<Planet> addedPlanets)
{
if (!addedPlanets.isEmpty())
{
fireTableDataChanged();
}
refresh();
}
public Planet getSelectedPlanet()
{
return selectedPlanet;
}
public void setSelectedPlanet(final Planet selectedPlanet)
{
if (selectedPlanet != this.selectedPlanet)
{
if (selectedPlanet != null
&& this.findColSorting(5) != Sorting.NONE)
{
fireTableDataChanged();
}
else
{
for (int row = 0; row < this.getRowCount(); ++row)
{
fireTableCellUpdated(row, 5);
}
}
}
this.selectedPlanet = selectedPlanet;
}
class ProductionRenderer implements TableCellRenderer
{
// private final HashMap<Integer, JProgressBar > components;
private final DefaultTableCellRenderer defaultRenderer;
private final TableProgressBar progressRenderer;
ProductionRenderer()
{
this.defaultRenderer = new DefaultTableCellRenderer();
this.progressRenderer = new TableProgressBar();
this.progressRenderer.setMinimum(0);
this.progressRenderer.setMaximum(Rules.PRODUCTION_PER_UNIT);
}
/**
* {@inheritDoc}
*/
public Component getTableCellRendererComponent(final JTable table,
final Object value, final boolean isSelected,
final boolean hasFocus, final int row, final int column)
{
final Planet planet = (Planet) value;
if (gameDatamanager.isOwn(planet))
{
this.progressRenderer.setValue((int) planet.getProduced());
return this.progressRenderer;
}
else
{
return this.defaultRenderer.getTableCellRendererComponent(
table, "", isSelected, hasFocus, row, column);
}
}
}
}
class OwnerRenderer extends DefaultTableCellRenderer
{
/**
*
*/
private static final long serialVersionUID = 1L;
private final GameData gameData;
public OwnerRenderer(final GameData mgr)
{
this.gameData = mgr;
}
protected void setValue(final Object value)
{
final Planet pl = (Planet) value;
setForeground(ColorsHelper.getColorFor(pl, gameData));
setText(pl.getOwner().getEntity(gameData.getRealmResolver()).getName());
}
}
class FleetSizeRenderer extends DefaultTableCellRenderer
{
/**
*
*/
private static final long serialVersionUID = 1L;
private final GameData gameData;
public FleetSizeRenderer(final GameData mgr)
{
this.gameData = mgr;
}
@Override
protected void setValue(final Object value)
{
final Planet pl = (Planet) value;
if (gameData.isOwn(pl))
{
setForeground(Color.BLACK);
setText(" " + String.valueOf(pl.getHomeFleetSize()));
}
else
{
setForeground(Color.GRAY);
setText(" " + String.valueOf(pl.getHomeFleetSize()) + "?");
}
}
}
class TableProgressBar extends JProgressBar
{
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public void invalidate()
{
}
@Override
public void validate()
{
}
@Override
public void repaint()
{
}
@Override
public void repaint(final int x, final int y, final int width,
final int height)
{
}
@Override
public void repaint(final long tm)
{
}
/**
* {@inheritDoc}
*/
@Override
public void repaint(final Rectangle r)
{
}
@Override
public void revalidate()
{
}
@Override
public boolean isOpaque()
{
return true;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -