Avatar billede soeborg Nybegynder
31. oktober 2002 - 11:41 Der er 39 kommentarer og
1 løsning

Hente og vise fra en anden klasse.

Hejsa..
Det er garanteret et pi**e let spørgsmål, men nu gider jeg ikke rode med det mere.
Jeg har lavet en tabel som jeg kalder venliste i en klasse som her icqListe i et program med masser af inderklasser… Hvordan får jeg vist den tabel i en anden klasse, hvor jeg har defineret et vindue..
Sådan tilføjer jeg normalt noget, her er det en knap :-):

getContentPane().add(jButtonGem,  new GridBagConstraints
(3, 6, 1, 1, 0.0, 0.0,GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));

Har prøvet alt (bortset fra det rigtige) bla.:
getContentPane().add(icqListe.venliste, new GridBagConstraints
(3, 7, 1, 1, 0.0, 0.0,GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));

Men får fejlen:
non-static variable pane cannot be referenced from a static context
getContentPane().add(icqListe.venliste, new GridBagConstraints          ^
           
/Soeborg
Avatar billede soeborg Nybegynder
31. oktober 2002 - 11:42 #1
ups den der: ^ skulle være under:
icqListe.venliste,
        ^
Avatar billede di8leva Nybegynder
31. oktober 2002 - 11:42 #2
hvis du gør alla inre klasser static så virket det nog, men det er svårt att sige utan att se all kod...
Avatar billede di8leva Nybegynder
31. oktober 2002 - 11:43 #3
ja, det er fordi den inre klass er ikke static, och den finns ikke om du ikke skapar en instans av icqListe....
Avatar billede di8leva Nybegynder
31. oktober 2002 - 11:44 #4
public class venliste ----> public static class venliste

(eller protected)
Avatar billede soeborg Nybegynder
31. oktober 2002 - 11:48 #5
det har jeg også prøvet men det giver fejl i klassen icqListe

class icqListe
{
  public icqListe()
  {
  }
}
Avatar billede di8leva Nybegynder
31. oktober 2002 - 11:49 #6
ved er fejlen nu?
Avatar billede di8leva Nybegynder
31. oktober 2002 - 11:50 #7
jag ser heller ikke variablen pane någonstans, det variabel som compiler brokker sig øver...
Avatar billede soeborg Nybegynder
31. oktober 2002 - 11:52 #8
class icqListe
{
private boolean DEBUG = true;
JFrame frame;
JPanel pane;
JTable venliste;
JScrollPane scrollPane;
JButton jButtonGem = new JButton("Gem");

public icqListe(Vector rows, Vector top)
{
Avatar billede di8leva Nybegynder
31. oktober 2002 - 11:54 #9
vad hænder om du sætter pane till static?
Avatar billede di8leva Nybegynder
31. oktober 2002 - 11:54 #10
hvad er koden for inner class venliste?
Avatar billede soeborg Nybegynder
31. oktober 2002 - 11:59 #11
public class venner
{
Vector data,top;
public static void main(String[] args)
{

Database db = new Database();
db.open();


ResultSet res = db.doQuery("SELECT Navn, Nickname, Icqnr FROM Venner");
Vector rows = new Vector();
try
{
while(res.next())
{
Vector newRow = new Vector();
newRow.addElement(new String(res.getString(1)));    // Navn
newRow.addElement(new String(res.getString(2)));    // Nickname
newRow.addElement(new Integer(res.getInt(3)));      // Icqnr

rows.addElement(newRow);
}
}
catch(SQLException e)
{}

        Vector top = new Vector();
        top.addElement(new String("Navn"));
        top.addElement(new String("Nickname"));
        top.addElement(new String("Icqnr"));

        db.close();

        icqListe icqListe = new icqListe(rows,top);
    }
}
Avatar billede di8leva Nybegynder
31. oktober 2002 - 12:02 #12
hmmm, jag førstår ikke helt hvordan dine klasser er oppbygget..

venner har instance av icqListe, og icqListe har inner class venliste? isåfall vill jag se source før venliste....
Avatar billede soeborg Nybegynder
31. oktober 2002 - 12:02 #13
nu er der ingen fejl men der er heller ingen tabel
Avatar billede di8leva Nybegynder
31. oktober 2002 - 12:04 #14
=)
Avatar billede soeborg Nybegynder
31. oktober 2002 - 12:09 #15
class icqListe
{
private boolean DEBUG = true;
JFrame frame;
static JPanel pane;
static JTable venliste;
JScrollPane scrollPane;
JButton jButtonGem = new JButton("Gem");

public icqListe(Vector rows, Vector top)
{
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (Exception e)
{}
// Sætter LookAndFeel

frame = new JFrame("Icq-Venner");
pane = new JPanel();
pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS));
// Laver vindue og panel

venliste = new JTable(rows, top);
setColWidth(0,150);    // Navn
setColWidth(1,175);    // Nickname
setColWidth(2,50);    // Icqnr
// Laver tabelen

scrollPane = new JScrollPane(venliste);
venliste.setPreferredScrollableViewportSize(new Dimension(800, 200));
pane.add(scrollPane, BorderLayout.CENTER);
// Tilføjer scrollpanel til vinduet, hvis det er for lille.

frame.getContentPane().add(pane);
// Tilføjer panelet til vinduet

pane.add(jButtonGem);

jButtonGem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
jButtonGem_actionPerformed(e);
}
});
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);

}
public void jButtonGem_actionPerformed(ActionEvent e)
{
printDebugData(venliste);
Database db = new Database();
db.open();
int res=db.doUpdate("Update Venner set Navn='Anders' Where Nickname='Anden'");
db.close();
System.out.println("OK");
}

private void printDebugData(JTable table)
{
int numRows = table.getRowCount();
int numCols = table.getColumnCount();
javax.swing.table.TableModel model = table.getModel();
System.out.println("Indtastet data: ");
System.out.println();
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();
}
System.out.println("--------------------------");
}

public void setColWidth(int col, int width)
{
venliste.getColumnModel().getColumn(col).setPreferredWidth(width);
}
}
Avatar billede soeborg Nybegynder
31. oktober 2002 - 12:10 #16
har 2 klasser... icqListe og venner og 1 tabel med navnet venliste
Avatar billede soeborg Nybegynder
31. oktober 2002 - 12:15 #17
du har fået al min source..
Avatar billede di8leva Nybegynder
31. oktober 2002 - 12:15 #18
ok, du har ikke en inner class som heter venliste, utan en JTable med namn venliste....
Avatar billede soeborg Nybegynder
31. oktober 2002 - 12:17 #19
Jeg har lavet en tabel som jeg kalder venliste i en klasse som hedder icqListe....
Avatar billede soeborg Nybegynder
31. oktober 2002 - 12:17 #20
nemlig ;)
Avatar billede di8leva Nybegynder
31. oktober 2002 - 12:20 #21
skapa en getFunction i icqListe

public JTable getVenListe() { return _venliste; }

og i din klass skapar du først en instance av icqListe

icqListe liste = new icqListe();

brug sen liste.getVenListe() i stedet for icqListe.venListe...

borde virke, men det er ikke ett nemt sett att løse problemet.
Avatar billede soeborg Nybegynder
31. oktober 2002 - 12:38 #22
i hvilken klasse skulle icqListe liste = new icqListe(); være?? For den siger at den ikke kan finde:
symbol  : constructor icqListe ()
location: class icqListe
icqListe liste = new icqListe();
                ^
Avatar billede di8leva Nybegynder
31. oktober 2002 - 12:51 #23
nå, men din icqListe skall ha to parametrar i constructorn, my bad....
det skall vare

icqListe liste = new icqListe(<din vector med rows>, <din vector med top (?)>);
Avatar billede di8leva Nybegynder
31. oktober 2002 - 12:51 #24
hvor er din main-metod... i vilken klass och hur ser den ut?
Avatar billede soeborg Nybegynder
31. oktober 2002 - 12:53 #25
ja det fandt jeg også ud af :), det hjalp ikke så meget...:
symbol  : variable kundetabel
location: class IcqMenu
        kundetabel.getKundeTabel();
                ^
1 error
Avatar billede di8leva Nybegynder
31. oktober 2002 - 12:57 #26
hur ser main ut? vilken klass ligger main i? och hvad er fejl-meddelelsen nu?
Avatar billede soeborg Nybegynder
31. oktober 2002 - 13:01 #27
puha det er en lang historie... alt i alt fylder det 1724 linier...

public static void main(String para[])
{try{
UIManager.setLookAndFeel"com.sun.java.swing.plaf.windows.WindowsLookAndFeel");}
catch (Exception e) { }
new OpstartsBillede();
}
public static void startProgram(){
database = new DbHandler();
new HovedMenu();}
Som ligger i en public klasse der hedder Startmain
Avatar billede soeborg Nybegynder
31. oktober 2002 - 13:02 #28
det virker med denne: Dog kommer der stadig ikke nogen tabel!
getContentPane().add(icqListe.getVenListe());
Avatar billede di8leva Nybegynder
31. oktober 2002 - 13:06 #29
er du sikker på at tabellen inneholder de korrekte data?

ser du columns men ikke nogen rows?
Avatar billede di8leva Nybegynder
31. oktober 2002 - 13:12 #30
... ???
virker det nu?
Avatar billede soeborg Nybegynder
31. oktober 2002 - 13:13 #31
Jeg ser ikke noget, jeg kan ikke åbne vinduet fra hovedmenuen, med mindre jeg udkommetere linien:
getContentPane().add(icqListe.getVenListe());
Avatar billede di8leva Nybegynder
31. oktober 2002 - 13:18 #32
huh... ?
hvad sker nær du førsøker øppna vinduet fra hovedmenuen med linien med i source:n. Sker det ingenting?
Avatar billede soeborg Nybegynder
31. oktober 2002 - 13:43 #33
ingen ting andet end en fejl i konsolen:
java.lang.NullPointerException
        at java.awt.Container.addImpl(Container.java:621)
        at java.awt.Container.add(Container.java:307)
        at StartMenu.<init>(Startmain.java:1240)
Avatar billede di8leva Nybegynder
31. oktober 2002 - 13:50 #34
aah, men det er et lille fejl, en komponent har ikke blivit skapad ænnu

paste:a in sourcekod, rad Startmain.java:1240 så får vi se
Avatar billede soeborg Nybegynder
31. oktober 2002 - 13:55 #35
oki det forstå jeg ikke lige?!?
Avatar billede di8leva Nybegynder
31. oktober 2002 - 13:58 #36
det er nok min svenska som er ivægen =)

copy your source code in StartMain.java, row 1240, and paste it here, then I can see where the Exception comes from =)
Avatar billede soeborg Nybegynder
31. oktober 2002 - 14:00 #37
Det var bedre :)
hmm så er vi tilbage hvor vi startede..
linie 1240:
getContentPane().add(icqListe.getVenListe());
Avatar billede di8leva Nybegynder
31. oktober 2002 - 14:07 #38
=)

getContentPane() er ju antaligen ikke null, så det måste vara icqListe som er null...

hvordan opretter du icqListe?
Avatar billede soeborg Nybegynder
31. oktober 2002 - 14:16 #39
jamen det er jo min klasse...
getContentPane().add(klassen.metoden i klaasen før punktum());
totalt forkert??
Avatar billede di8leva Nybegynder
31. oktober 2002 - 14:25 #40
jo men någonstans måste du ju skriva
icqListe listInstance = new icqListe(........ etc før att skapa en instance av listan, och sedan skriver du
listInstance .getVenListe()
du kan ikke skriva icqListe.getVenListe() om ikke getVenListe() er en static function, och hvis getVenListe() ER en static function kommer den att returnera en JTable som er null....

ett alernativ er:

public static JTable getVenListe()
{
    if(_venliste == null)
        _venliste = new JTable(<vector som du vill bruge>, <vector som du vill bruge>);
    return _venliste;
}

fejlet du laver er att ikke skapa instancer av dine objekter (med new xxxx )

och derfor er de null...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester