16. december 2002 - 22:55
Der er
3 kommentarer og
2 løsninger
Trække data ud fra en Vector
Hej,
Jeg har i JTable med to Vectorer. Jeg ville meget gerne om nogen kunne fortælle hvordan man hiver data ud at sådan en Vector.
Her er opbygningen af min JTable:
sql = "SELECT EANNr as EAN, VareNavn as Navn, Antal, BufferAntal, ReolID as Reol, PladsNr as Plads FROM Vare ORDER BY VareNavn ASC";
ResultSet rs = db.executeResult(sql);
Vector dbtable = new Vector();
ResultSetMetaData meta = rs.getMetaData();
Vector header = new Vector();
for (int i = 1; i <= meta.getColumnCount(); i++)
header.add(meta.getColumnLabel(i));
while (rs.next())
{
Vector tupple = new Vector();
for (int i = 1; i <= meta.getColumnCount(); i++)
tupple.add(rs.getObject(i));
dbtable.add(tupple);
}
table = new JTable(dbtable, header);
Jeg vil gerne kunne hive data ud ved f.eks dobbeltklik på en række i tabellen.
16. december 2002 - 23:43
#2
>arne
Du gad mig tidligere et svar, som hjalp, og som er det samme som dette problem. I dette tilfælde er det ikke en string der skal ud, men et object(vector)
import java.util.*;
import java.sql.*;
import Vare;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.JScrollPane;
import javax.swing.JPanel;
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;
public class DBvare
{
private DBFunctions db;
private String sql;
JTable table;
private boolean DEBUG = false;
private boolean ALLOW_ROW_SELECTION = true;
public DBvare(DBFunctions d)
{ db = d;
}
// Søger via et SQL statement i databasen og returnerer resultaterne i en Vector
public JTable alleVarer()
{
try
{
sql = "SELECT EANNr as EAN, VareNavn as Navn, Antal, BufferAntal, ReolID as Reol, PladsNr as Plads FROM Vare ORDER BY VareNavn ASC";
ResultSet rs = db.executeResult(sql);
Vector dbtable = new Vector();
ResultSetMetaData meta = rs.getMetaData();
Vector header = new Vector();
for (int i = 1; i <= meta.getColumnCount(); i++)
header.add(meta.getColumnLabel(i));
while (rs.next())
{
Vector tupple = new Vector();
for (int i = 1; i <= meta.getColumnCount(); i++)
tupple.add(rs.getObject(i));
dbtable.add(tupple);
}
table = new JTable(dbtable, header);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
if (ALLOW_ROW_SELECTION) { // true by default
ListSelectionModel rowSM = table.getSelectionModel();
rowSM.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
//Ignore extra messages.
if (e.getValueIsAdjusting()) return;
ListSelectionModel lsm = (ListSelectionModel)e.getSource();
if (lsm.isSelectionEmpty()) {
System.out.println("No rows are selected.");
} else {
int selectedRow = lsm.getMinSelectionIndex();
System.out.println("række " + selectedRow
+ " is now selected.");
}
}
});
}
else
{
table.setRowSelectionAllowed(false);
}
if (DEBUG) {
table.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
printDebugData(table);
}
});
}
}
catch (Exception e)
{
e.printStackTrace();
}
return table;
}
// Gør data klar til opdatering af databasen
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 void opretVare(int varegruppe, String eannr, String varenavn, int antal, int bufferantal, int reolid, int plads)
{
int VareGruppe = varegruppe;
String EanNr = "'" + eannr + "'";
String VareNavn = "'" + varenavn + "'";
int Antal = antal;
int BufferAntal = bufferantal;
int ReolId = reolid;
int Plads = plads;
doOpret(VareGruppe, EanNr, VareNavn, Antal, BufferAntal, ReolId, Plads);
}
// En metode som eksekverer opdateringerne i databasen
public void doOpret(int VareGruppe, String EanNr, String VareNavn, int Antal, int BufferAntal, int ReolId, int Plads)
{
sql = "INSERT INTO VARE(VareGruppeID, EANNr, VareNavn, Antal, BufferAntal, ReolID, PladsNr) VALUES (" + VareGruppe + ", " + EanNr + ", " + VareNavn + ", " + Antal + ", " + BufferAntal + ", " + ReolId + ", " + Plads + ");";
db.executeNoResult(sql);
}
}
17. december 2002 - 08:28
#4
Jeg har løst et lignende problem på denne måde. Jeg havde også en JTable opbygget af vectorer, så har jeg proppet en mouselistener på min JTable og her er min mouseClicked:
public void mouseClicked (MouseEvent me)
{
boolean sendt;
int row = tableView.getSelectedRow();
Vector temp = (Vector) beskeder2.elementAt(row);
String beskedAfsender = (String) temp.elementAt(1);
String beskedTeksten = (String) temp.elementAt(5);
Date deadLine=null, sendtDato= null;
DateFormat DF = DateFormat.getDateInstance();
String deadLineString = (String)temp.elementAt(3);
String deadlineString = FormatDate.formatDate(deadLineString);
String sendtDateString = FormatDate.formatDate((String)temp.elementAt(0));
if (((String)temp.elementAt(4)).equals("true"))
sendt = true;
else
sendt = false;
try
{
deadLine = DF.parse(deadlineString);
}
catch (Exception e)
{System.out.println ("Inde i catch");}
try
{
sendtDato = DF.parse (sendtDateString);
}
catch (Exception e)
{
System.out.println("Inde i catch nummer 2");
}
String type = (String) temp.elementAt(2);
besked = new Besked (beskedAfsender, beskedTeksten, deadLine, sendtDato, type, sendt);
dispose();
send = new Send (profil, besked);
}
beskeder2 er en todimensional vector der indeholder dataerne i tabellen