16. december 2003 - 01:13Der er
17 kommentarer og 2 løsninger
mange genererede JLists, og hvilken tjekker man på?
Hejsa Jeg sidder med lidt af et problem... Jeg har en Gui, hvor jeg har genereret en flok JLists og sendt vectorer med til at putte i dem, men de er alle lavet i ét navn JList generelListe = new JList()... Der er flere ting i det, for jeg vil gerne kunne se hvad der er markeret i alle listerne og sende dette med videre når jeg trykker på en knap. Jeg vil også gerne kunne afmarkere noget, der allerede er markeret i et felt ved at trykke på det igen... Generelt vil jeg gerne kunne tjekke på hvad der er markeret, hvilken liste det er markeret i og bare kunne referere til listerne. Er det for meget forlangt??? Håber der er hjælp at hente - jeg har prøvet med mouselisteners og listSelectionListeners, men jeg kan sgu ikke lige hitte ud af det... med venlig hilsen Thomas
tak for svarene, men det er desværre lidt mere kompliceret end som så. problemet er at jeg genererer alle listerne med ét navn og derfor ikke kan tjekke på dem enkeltvis - eller kan jeg??? jeg har tænkt på at oprette en Vector, lavJList(Vector hundestatus) kan kaste tilbage, indeholdende alle de JLists, der er blevet oprettet og lade listeneren forsøge med alle listerne... Er det en glidebane eller en god idé? jeg adder allerede både selectionListener og mouseListener, men får ikke noget ud af at tjekke på mouseListener - selectionListener kan give index tilbage og sådan, men jeg ved ikke hvilke lister der er valgt i! desuden er det ret vigtigt at man kan vælge de valgte fra igen én efter én... Her er koden ihvertfald, og man må da gerne grine, men jeg ved sgu ikke lige om der er en bedre løsning... public void HundestatusLister(Vector hundestatus) { Object[] koordinater = { new Rectangle(20, 90, 180, 220), new Rectangle(220, 90, 180, 220), new Rectangle(420, 90, 180, 220), new Rectangle(20, 340, 180, 220), new Rectangle(220, 340, 180, 220), new Rectangle(420, 340, 180, 220), new Rectangle(820, 90, 180, 290), new Rectangle(620, 90, 180, 220), new Rectangle(620, 340, 180, 220), new Rectangle(620, 590, 180, 90), new Rectangle(220, 590, 180, 90), new Rectangle(20, 590, 180, 90), new Rectangle(820, 410, 180, 270), new Rectangle(420, 590, 180, 90)}; lavJList(koordinater, hundestatus); } public void lavJList(Object[] bounds, Vector hundestatus) { int antal = bounds.length; for (int i = 0; antal > 0; i++) { generelListe = new JList((Vector) hundestatus.elementAt(i)); generelListe.setBorder( new javax.swing.border.SoftBevelBorder( javax.swing.border.BevelBorder.RAISED)); generelListe.setFont(new java.awt.Font("Dialog", 0, 12)); JScrollPane generelRulle = new JScrollPane(generelListe); getContentPane().add(generelRulle); generelRulle.setBounds((Rectangle) Array.get(bounds, i)); antal = antal - 1; generelListe.addListSelectionListener(this); generelListe.addMouseListener(mouseListener); } }
Håber der er nogen der har en løsning eller to :o) mvh Thomas
public void lavJList(Object[] bounds, Vector hundestatus) { int antal = bounds.length; generelListe = new JList[antal]; for (int i = 0; antal > 0; i++) { generelListe[i] = new JList((Vector) hundestatus.elementAt(i)); generelListe[i].setBorder( new javax.swing.border.SoftBevelBorder( javax.swing.border.BevelBorder.RAISED)); generelListe[i].setFont(new java.awt.Font("Dialog", 0, 12)); JScrollPane generelRulle = new JScrollPane(generelListe[i]); getContentPane().add(generelRulle); generelRulle.setBounds((Rectangle) Array.get(bounds, i)); antal = antal - 1; generelListe[i].addListSelectionListener(this); generelListe[i].addMouseListener(mouseListener); } }
Hvad noget a la nedenstående (har ikke testet) jList1.addListSelectionListener(new javax.swing.event.ListSelectionListener() { public void valueChanged(javax.swing.event.ListSelectionEvent evt) { if(jList1.getValueIsAdjusting()) {
ListModel model = jList1.getModel(); int size = model.getSize();
for(int i = 0; i < size - 1 ; i++){ if(model.getElementAt(i).equals(hundestatus.elementAt(i))) System.out.println("BINGO"); }
Det ser rigtigt fornuftigt ud arne, men hvad skal jeg tjekke på og hvordan i listeners og det? jeg er ikke en turbohaj i listenere - ved faktisk ikke særlig meget om dem :( Carsten - jeg har prøvet ovenstående, men får ikke så meget andet end fejl ud af det :( hvis jeg med Arnes metode vil prøve at teste på hvilken JList der vælges på og hvis det valgte er valgt på forhånd, hvordan kan man det?
Har ellers lige testet og her virker det fint, skyldes sikkert at du ikke får fat i vectoren hundestatus
Jeg forstår bare ikke måden du gør det på, det må give dig 11 JList's med ét element i hver, i stedet for én JList indeholdene 11 elementer. Og så et det, at jeg overhovedet ikke kan følge ideen med en JList
Hejsa Ja godt spottet Arne - Det skulle jeg nok lige have nævnt, men programmet skal holde styr på spande med hunde til slædekørsel, og det er meningen at man skal kunne vælge én hund og se dens oplysninger, men også at man skal kunne vælge flere hunde og skrive hvilke vacciner man har givet dem og hvornår... Man skal således kunne vælge og fravælge på listerne og der skal tjekkes på hvor mange der er valgt og hvilke der er valgt, da dette skal gøre nogen knapper enabled og andre disabled... Håber det gav lidt mere forståelse for problemet. mvh. Thomas
public class JFrame_8 extends javax.swing.JFrame { private Vector hundestatus = new Vector(); private Vector hund = new Vector(); private JList[] generelListe; private JScrollPane[] generelRulle; private JTextField text = new JTextField(25);
public JFrame_8() { for(int x = 0; x < 14; x++){ hund.addElement("Navn " + x); }
for(int i = 0; i < 14;i++){ hundestatus.add(hund); }
public static void main(String args[]) { new JFrame_8().show(); }
class Listener implements javax.swing.event.ListSelectionListener { public void valueChanged(javax.swing.event.ListSelectionEvent e) { if(e.getValueIsAdjusting()) { JList list = (JList)e.getSource(); text.setText("Nr. " + list.getSelectedIndex() + " er valgt, teksten er: " + list.getSelectedValue()); /** * Det er her du checke om de er ens * Lidt svært for mig med de værdier * jeg har i de JList's */ } } } }
Det du gør giver masser af mening Carsten - Det funker. Jeg vidste ikke at man kunne bruge getSource på den måde, men det er jo fedt. Jeg vælger dog nok stadig at bruge noget fra Arnes metoder, så I får sgu 50/50 (hvis bare jeg vidste hvordan man gav points for der er ikke en acceptermulighed...) Det eneste er bare at jeg gerne skulle kunne fravælge de valgte igen, således at der bliver checket på om der allerede er valgt der hvor man forsøger at vælge igen, for så skal det fravælges. jeg slår den op i et nyt indlæg og så kan I jo kigge på det også hvis I har lyst.
Hvis du indsætter generelListe[i].setName("" + i); før getContentPane().add(generelRulle); i lavJList() metoden, kan du bruge det til at spore hvilken JList der blev klikket på
Her efter ændrer du classen Listener til følgende class Listener implements javax.swing.event.ListSelectionListener { public void valueChanged(javax.swing.event.ListSelectionEvent e) { if(e.getValueIsAdjusting()) { JList list = (JList)e.getSource(); text.setText("Der blev klikket på JList nr. " + list.getName() + " item nr. " + list.getSelectedIndex() + "teksten er: " + list.getSelectedValue() );
Så er den accepteret, men af ren nysgerrighed (eller det er det jo ikke helt...) hvis man vil styre en knap på samme måde, således at det er muligt at trykke på nogle knapper hvis ingen hunde er valgt, og muligt at trykke på nogle andre hvis 1 hund er valgt og muligt med nogle andre igen, hvis flere er valgt? Altså sådan at man i samme ombæring som der hvor man finder ud af hvad der er trykket på, lige undersøger om der er en eller flere, og så kalder metoden disableKnap for de knapper det drejer sig om...
Synes godt om
Ny brugerNybegynder
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.