Java - Problema con JTable

 
Vista:

Problema con JTable

Publicado por Manuel Gómez (1 intervención) el 23/01/2008 11:32:29
Buenos días,

Tengo un problema con la clase JTable y es que no consigo que se me muestren los nombres de las columnas, he probado creando un modelo de tabla(AbstractTableModel) y sobrescribiendo el método getColumnName y nada, también he probado a pasárselo directamente al constructor de JTable y tampoco. Espero que alguien pueda ayudarme lo más pronto posible.

Un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema con JTable

Publicado por ideasjava (83 intervenciones) el 23/01/2008 16:21:12
Hola. Habria que ver el codigo que estas utilizando. Te dejo estas direcciones, a ver si te ayudan con lo que necesitas. Cualquier cosa pregunta

http://www.javahispano.org/contenidos/es/jtable_con_ejemplos_parte_1/

http://www.itapizaco.edu.mx/paginas/JavaTut/froufe/parte14/cap14-13.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con JTable

Publicado por Manuel Gómez (3 intervenciones) el 24/01/2008 17:43:21
Adjunto aquí un fragmento de código a ver si me podéis decir donde esta el fallo.

String titulo[]= {"c1", "c2"};
Object datos[][] = {{"un", "dos"}, {"tres", "cuatro"}};
JTable table = new JTable(datos, titulo);
table.setBounds(30, 50, 500,300);
JScrollPane sptable = new JScrollPane();
sptable.setLayout(null);
sptable.setBounds(30, 50, 500,300);
sptable.add(table);
pnlDataResults.add(sptable);

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con JTable

Publicado por ideasjava (83 intervenciones) el 24/01/2008 20:08:59
Prueba agregar la tabla de esta manera

sptable.getViewport().add(table, null);

o sino fijate en este codigo que hace algo similar al codigo que enviaste

import javax.swing.JTable;
import javax.swing.JScrollPane;
import javax.swing.JPanel;
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;

public class SimpleTableDemo extends JFrame {
private boolean DEBUG = true;

public SimpleTableDemo() {
super("SimpleTableDemo");

Object[][] data = {
{"Mary", "Campione",
"Snowboarding", new Integer(5), new Boolean(false)},
{"Alison", "Huml",
"Rowing", new Integer(3), new Boolean(true)},
{"Kathy", "Walrath",
"Chasing toddlers", new Integer(2), new Boolean(false)},
{"Mark", "Andrews",
"Speed reading", new Integer(20), new Boolean(true)},
{"Angela", "Lih",
"Teaching high school", new Integer(4), new Boolean(false)}
};

String[] columnNames = {"First Name",
"Last Name",
"Sport",
"# of Years",
"Vegetarian"};

final JTable table = new JTable(data, columnNames);
table.setPreferredScrollableViewportSize(new Dimension(500, 70));

if (DEBUG) {
table.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
printDebugData(table);
}
});
}

//Create the scroll pane and add the table to it.
JScrollPane scrollPane = new JScrollPane(table);

//Add the scroll pane to this window.
getContentPane().add(scrollPane, BorderLayout.CENTER);

addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}

private void printDebugData(JTable table) {
int numRows = table.getRowCount();
int numCols = table.getColumnCount();
javax.swing.table.TableModel model = table.getModel();

System.out.println("Value of data: ");
for (int i=0; i < numRows; i++) {
System.out.print(" row " + i + ":");
for (int j=0; j < numCols; j++) {
System.out.print(" " + model.getValueAt(i, j));
}
System.out.println();
}
System.out.println("--------------------------");
}

public static void main(String[] args) {
SimpleTableDemo frame = new SimpleTableDemo();
frame.pack();
frame.setVisible(true);
}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

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) {}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con JTable

Publicado por Peter (2 intervenciones) el 24/03/2012 08:35:30
Para que muestre los nombres de las columnas el JTable tiene que estar contenido dentro de un JScrollPane: scrollPane.setViewportView(table);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar