RE:Problema con JTable
Publicado por
jamir (1 intervención) el 30/01/2008 00:41:33
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
@SuppressWarnings("serial")
public class ModeloTransportes extends JFrame implements KeyListener,MouseListener,MouseMotionListener{
private static final long serialVersionUID = 1L;
private Dimension tamPantalla=Toolkit.getDefaultToolkit().getScreenSize();
private JPanel panel;
private JLabel lblnumFuentes;
private JLabel lblnumDestinos;
private JTextField txtnumFuentes;
private JTextField txtnumDestinos;
private DefaultTableModel dtmModTrans;
private JScrollPane jspModTrans;
private Object destinos[];
private Object fuentes[];
private String numDestinos;
private String numFuentes;
private int numFuen;
private int numDest;
private JTable tblModTrans = new JTable()
{
public Component prepareRenderer(TableCellRenderer renderer, int rowIndex, int colIndex)
{
Component component = super.prepareRenderer(renderer, rowIndex, colIndex);
if(colIndex == 0)
{
component.setBackground(new Color(236,233,216));
component.setForeground(Color.black);
component.setFont(new Font("dialog",Font.PLAIN,12));
}
else
{
component.setBackground(Color.white);
component.setForeground(Color.black);
component.setFont(new Font("dialog",Font.PLAIN,12));
}
if((rowIndex == (fuentes.length - 1))||(colIndex==(destinos.length-1)))
{
component.setBackground(new Color(250,251,215));
component.setForeground(new Color(104,26,39));
}
if((colIndex==(destinos.length-1))&&(rowIndex==(fuentes.length-1)))
{
component.setBackground(new Color(236,233,216));
}
return component;
}
public boolean isCellEditable(int rowIndex, int columnIndex)
{
if(columnIndex==0)
{
return false;
}
if((columnIndex==(destinos.length-1))&&(rowIndex==(fuentes.length-1)))
{
return false;
}
return true;
}
};
public ModeloTransportes() {
configurar();
}
public ModeloTransportes(String arg0) {
super(arg0);
configurar();
}
public void configurar()
{
setBounds((tamPantalla.width-900)/2,(tamPantalla.height-750)/2,900,750);
panel = new JPanel();
panel.setLayout(null);
lblnumFuentes = new JLabel("Numero de Fuentes");
lblnumDestinos = new JLabel("Numero de Destinos");
txtnumDestinos = new JTextField();
txtnumFuentes = new JTextField();
jspModTrans = new JScrollPane(tblModTrans);
lblnumFuentes.setBounds(40,20,100,20);
lblnumDestinos.setBounds(40,60,100,20);
txtnumDestinos.setBounds(160,60,100,20);
txtnumFuentes.setBounds(160,20,100,20);
tblModTrans.addMouseListener(this);
tblModTrans.addMouseMotionListener(this);
tblModTrans.addKeyListener(this);
jspModTrans.setBounds(10,100,870,490);
jspModTrans.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
jspModTrans.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
txtnumDestinos.addKeyListener(this);
txtnumFuentes.addKeyListener(this);
panel.add(jspModTrans);
panel.add(lblnumFuentes);
panel.add(lblnumDestinos);
panel.add(txtnumDestinos);
panel.add(txtnumFuentes);
Container c = getContentPane();
c.add(panel);
}
public static void main(String[] args)
{
try
{
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (Exception e) {}
ModeloTransportes frm = new ModeloTransportes();
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setTitle("MODELO DE TRANSPORTES");
frm.setResizable(false);
frm.setVisible(true);
}
public void crearTabla(String numFuentes,String numDestinos)
{
if(numFuentes.isEmpty())
numFuentes = "0";
if(numDestinos.isEmpty())
numDestinos = "0";
numFuen = Integer.valueOf(numFuentes);
numDest = Integer.valueOf(numDestinos);
destinos = new Object[numDest + 2];
fuentes = new Object[numFuen + 1];
for(int i=1;i<destinos.length;i++)
{
if(i==(destinos.length -1))
destinos[i] = "Disponibilidades";
else
destinos[i] = "Destino " + i;
}
dtmModTrans = new DefaultTableModel(destinos,numFuen+1);
tblModTrans.setModel(dtmModTrans);
tblModTrans.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
tblModTrans.setCellSelectionEnabled(true);
tblModTrans.getTableHeader().setReorderingAllowed(false);
DefaultTableCellRenderer tcr = new DefaultTableCellRenderer();
tcr.setHorizontalAlignment(SwingConstants.CENTER);
for(int i=0;i<destinos.length;i++)
{
tblModTrans.getColumnModel().getColumn(i).setResizable(false);
tblModTrans.getColumnModel().getColumn(i).setMaxWidth(120);
tblModTrans.getColumnModel().getColumn(i).setMinWidth(120);
}
for(int i=1;i<destinos.length;i++)
tblModTrans.getColumnModel().getColumn(i).setCellRenderer(tcr);
for(int i=0;i<fuentes.length;i++)
{
if(i==(fuentes.length-1))
{
fuentes[i] = "Requerimientos";
tblModTrans.setValueAt(fuentes[i],i,0);
}
else
{
fuentes[i] = "Fuente " + (i+1);
tblModTrans.setValueAt(fuentes[i],i,0);
tblModTrans.isCellEditable(i,0);
}
}
for(int i=0;i<fuentes.length;i++)
{
for(int b=1;b<destinos.length;b++)
{
if((i==fuentes.length-1)&&(b==destinos.length-1))
tblModTrans.setValueAt("",i,b);
else
tblModTrans.setValueAt(0,i,b);
}
}
}
private boolean verificarCelda(String celda)
{
boolean cond = false;
int y = 0;
while((y<celda.length())&&(cond == false))
{
if(!(Character.isDigit(celda.charAt(y))))
cond = true;
y++;
}
return cond;
}
public void keyReleased(KeyEvent arg0)
{
if(arg0.getSource()==tblModTrans)
{
if((arg0.getKeyCode()==KeyEvent.VK_ENTER)||(arg0.getKeyCode()==KeyEvent.VK_DOWN)||(arg0.getKeyCode()==KeyEvent.VK_UP)||(arg0.getKeyCode()==KeyEvent.VK_LEFT)||(arg0.getKeyCode()==KeyEvent.VK_RIGHT))
{
for(int i=1;i<destinos.length;i++)
{
for(int b=0;b<fuentes.length;b++)
{
if((i==destinos.length-1)&&(b==fuentes.length-1))
tblModTrans.setValueAt("",b,i);
else
{
if(tblModTrans.getValueAt(b,i).toString().length() == 0)
{
tblModTrans.setValueAt(Integer.valueOf(0).intValue(),b,i);
}
if(verificarCelda(tblModTrans.getValueAt(b,i).toString()) == true)
{
tblModTrans.setValueAt(Integer.valueOf(0).intValue(),b,i);
}
int a = Integer.valueOf(tblModTrans.getValueAt(b,i).toString()).intValue();
tblModTrans.setValueAt(a,b,i);
}
}
}
}
}
}
public void keyPressed(KeyEvent arg0)
{
if((arg0.getSource() == txtnumDestinos)||(arg0.getSource() == txtnumFuentes))
if(arg0.getKeyCode()==KeyEvent.VK_ENTER)
{
numDestinos = txtnumDestinos.getText();
numFuentes = txtnumFuentes.getText();
crearTabla(numFuentes,numDestinos);
}
}
public void keyTyped(KeyEvent arg0) {}
public void mouseClicked(MouseEvent arg0) {}
public void mouseEntered(MouseEvent arg0) {}
public void mouseExited(MouseEvent arg0) {}
public void mousePressed(MouseEvent arg0) {}
public void mouseReleased(MouseEvent arg0) {}
public void mouseDragged(MouseEvent arg0) {}
public void mouseMoved(MouseEvent arg0) {}
}