Hashmap in DefaultTableModel

Diskutiere Hashmap in DefaultTableModel im AWT, Swing, JavaFX & SWT Bereich.
N

NichtExpert

Hallo Liebe Community,

ich scheitere bei dem Versuch, die Werte einer Hashmap im Model der JTable auszugeben.

anbei ein paar versuche.

Java:
HashMap<String, String> capitalCities = new HashMap<String, String>();
            

            // Add keys and values (Country, City)
            capitalCities.put("England", "London");
            capitalCities.put("Germany", "Berlin");
            capitalCities.put("Norway", "Oslo");
            capitalCities.put("USA", "Washington DC");

            int[] row = {0};
            while ((capitalCities != null)) {
                model.addRow(new Object[0]);
                model.setValueAt(capitalCities.get("Land"), row[0], 0);
                model.setValueAt(capitalCities.get("Stadt"), row[0], 0);
                //capitalCities.entrySet()
                for(Map.Entry m : capitalCities.entrySet()) {
                    System.out.println(m.getKey() + " " + m.getValue());
                    //model.getValueAt(m.getKey());
                    //model.getValueAt(m.getValue());

                }
                row[0]++;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
Hoffe mir kann einer weiterhelfen.

Gruß NichtExpert
 
MoxxiManagarm

MoxxiManagarm

Du hast da eine Dauerschleife. Mach ein if aus dem while.


Ich finde die Schleife um das Model zu befüllen aber persönlich sehr unschön. Dahr persönliche Empfehlung: Bau dir ein eigenes Model. Hier eine quick&dirty Demo:

Java:
public class MapTableModelDemo extends JFrame {

    public MapTableModelDemo() {
        setTitle("MapTableModelDemo");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      
        HashMap<String, String> capitalCities = new HashMap<>();
      
        capitalCities.put("England", "London");
        capitalCities.put("Germany", "Berlin");
        capitalCities.put("Norway", "Oslo");
        capitalCities.put("USA", "Washington DC");

        setLayout(new BorderLayout());
        JTable table = new JTable(new MapTableModel<>(capitalCities));
        add(table.getTableHeader(), BorderLayout.NORTH);
        add(table, BorderLayout.CENTER);

        pack();
    }

    public static void main(String... args) {
        new MapTableModelDemo().setVisible(true);
    }
}

class MapTableModel<K, V> extends AbstractTableModel {
    private Map<K, V> map;

    public MapTableModel(Map<K, V> map) {
        this.map = map;
    }

    @Override
    public int getRowCount() {
        return map.size();
    }

    @Override
    public int getColumnCount() {
        return 2;
    }

    @Override
    public String getColumnName(int columnIndex) {
        return columnIndex == 0 ? "Land" : "Stadt";
    }

    @Override
    public Class<?> getColumnClass(int columnIndex) {
        return String.class;
    }

    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return false;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        Map.Entry<K, V> entry = (Map.Entry)map.entrySet().toArray()[rowIndex];
        return columnIndex == 0 ? entry.getKey().toString() : entry.getValue().toString();
    }
}
 
Zuletzt bearbeitet:
Thema: 

Hashmap in DefaultTableModel

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben