2016-05-19 8 views
0

den Code Mit dieser link Laden Textdatei Inhalt GUI:JButton HashMap zählen klicken

Map<String, ArrayList<String>> sections = new HashMap<>(); 
String s = "", lastKey=""; 
try (BufferedReader br = new BufferedReader(new FileReader("input.txt"))) { 
    while ((s = br.readLine()) != null) { 
     String k = s.substring(0, 10).trim(); 
     String v = s.substring(10, s.length() - 50).trim(); 
     if (k.equals("")) 
      k = lastKey; 

     ArrayList<String> authors = null; 
     if(sections.containsKey(k)) 
     { 
      authors = sections.get(k); 
     } 
     else 
     { 
      authors = new ArrayList<String>(); 
      sections.put(k, authors); 
     } 
     authors.add(v); 
     lastKey = k; 
    } 
} catch (IOException e) { 
} 

Mit Hilfe von @ Michael Markidis die HashMap Artikel Zählen mit diesem Code:

// to get the number of authors 
int numOfAuthors = sections.get("AUTHOR").size(); 

Jetzt Ich würde gerne numOfAuthors als Parameter von jButton1 verwenden, zum Beispiel:

jButton1.doClick(numOfAuthors); 

Eigentlich allgemeine Struktur der GUI: Ich habe jPanel1 mit jTextField1 und jButton1. jButton1 Hinzufügen von dynamischen tf zu jPanel2.

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
    SubPanel sub = new SubPanel(); 
    jPanel2.add(sub); 
    jPanel2.revalidate(); 
} 

Die Anzahl der Elemente in HashMap ist 12, so wo'd Ich mag diese Zahl als Parameter von jButton1 zu verwenden, und klicken Sie auf 12 Zeiten und fügen Sie zusätzliche 12sub ‚s.

System.out.println(numOfAuthors); 
    Output: 12 

Aber für diesen Moment jButton1 kommt noch hinzu, 1sub.

Ich kann nicht verstehen, warum es nicht richtig funktioniert.

+0

Was ist der Layout-Manager von 'jPanel2'? – Berger

+0

@Berger VerticalLayout – hub

Antwort

4

Schreiben Sie eine Klasse, die ActionListener implementiert

public class Clicker implements ActionListener { 

    @Override 
    public void actionPerformed(ActionEvent e) { 
    } 

} 

einen Konstruktor dieser Klasse hinzufügen, die eine Reihe

public class Clicker implements ActionListener { 

    private int count; 

    public Clicker(int count) { 
     this.count = count; 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
    } 

} 

verwenden, um Bestimmungen über das, was Sie tun müssen, zum Beispiel nimmt

@Override 
public void actionPerformed(ActionEvent e) { 
    for (int index = 0; index < count; index++) { 
     SubPanel sub = new SubPanel(); 
     jPanel2.add(sub); 
    } 
} 

Sie würden dann dieseregistrierengegen Ihre JButton

jButton1.addActionListener(new Clicker(12)); 

Denken Sie daran, wenn Sie auf die Taste, um alle ActionListener s zuvor hinzugefügt haben, werden Sie sie zuerst zu entferne

Werfen Sie einen Blick auf How to Use Buttons, Check Boxes, and Radio Buttons und How to Write an Action Listeners für weitere Details

Für einen etwas fortgeschritteneren Ansatz, könnten Sie einen Blick auf How to Use Actions

+0

Ohh Sorry, ich wurde missverstanden. Danke für Ihre Mühe, Ihre Methode funktioniert perfekt !! Akzeptierte Antwort und +1. – hub