HashMapa w apjvlikacji okienkowej

0

Cześć,
to są moje pierwsze kroki w Javie i piszę aplikację okienkową , w której mam wyświetlić ilość znaków w tekście.

 JPanel panelDod = new JPanel(new GridLayout(1, 2));
 JPanel zlicz = new JPanel(new FlowLayout(FlowLayout.CENTER));
 panelDod.add(zlicz);
 JLabel iloscZnakow = new JLabel("Ilość znaków w tekscie: ");
 zlicz.add(iloscZnakow);
        
    
        HashMap<Character,Integer> counters = new HashMap<Character,Integer>();
                char[] letters = textArea.getText().toCharArray();
                for(char letter: letters)
                {
                    counters.put(letter,counters.getOrDefault(letter,0) + 1);
                    
                }
JLabel ilosc = new JLabel ( counters);
zlicz.add(ilosc);

Nie wiem w jaki sposób to połączyć żeby zwracało poprawny wynik.

Będę wdzięczna za wskazówki :)

0

A co Ci nie działa?

0

Masz ten kod w miejscu bez sensu. Rozumiem że chcesz to policzyć w odpowiedzi na jakąś akcje (np. kliknięcie buttona) czy np. napisanie czegoś w tym texarea, a nie policzyć w chwili startowania aplikacji (jak teraz). W takim razie musisz dodać to jako akcje do czegoś, np. do buttona czy do textarea.
Coś w stylu:

 JPanel panelDod = new JPanel(new GridLayout(1, 2));
 JPanel zlicz = new JPanel(new FlowLayout(FlowLayout.CENTER));
 panelDod.add(zlicz);
 JLabel iloscZnakow = new JLabel("Ilość znaków w tekscie: ");
 zlicz.add(iloscZnakow);
JLabel ilosc = new JLabel ("0");
zlicz.add(ilosc);
textArea.addActionListener(x->{
        HashMap<Character,Integer> counters = new HashMap<Character,Integer>();
                char[] letters = textArea.getText().toCharArray();
                for(char letter: letters)
                {
                    counters.put(letter,counters.getOrDefault(letter,0) + 1);
                }
        ilosc.setText("cośtam");
});
0

dostaję komunikat, że mam zły konstruktor do JLabel i HashMap

1

To jest najmniejszy problem akurat. Po prostu nie ma sensu zapis JLabel ilosc = new JLabel ( counters); bo counters to mapa. Co oznacza niby uworzenie labelki na podstawie mapy? Labelka oczekuje jakiegoś stringa.

0
JButton iloscZnakow = new JButton("Ilość znaków w tekscie: ");
        zlicz.add(iloscZnakow);
        JLabel ilosc = new JLabel ("0");
        zlicz.add(ilosc); 
        iloscZnakow.addActionListener(x->{
        HashMap<Character,Integer> counters = new HashMap<Character,Integer>();
                char[] letters = textArea.getText().toCharArray();
                for(char letter: letters)
                {
                    counters.put(letter,counters.getOrDefault(letter,0) + 1);
                }
                
        ilosc.setText("coś");

Prawie działa tylko nie wiem co dopisać żeby uzyskać liczbę znaków. Czy żeby dostać szukaną liczbę powinnam dodać coś typu

zlicz.add(ilosc); 
iloscZnakow.addActionListener(this);
        iloscZnakow.setActionCommand("1");
...
public void actionPerformed(ActionEvent e) {
... case :1{
HashMap<Character,Integer> counters = new HashMap<Character,Integer>();
                char[] letters = textArea.getText().toCharArray();
                for(char letter: letters)
                {
                    counters.put(letter,counters.getOrDefault(letter,0) + 1);
                }
}     
1

Prawie działa

No nie wiem. Jak widze addActionListener(this); to robi mi się ciemno przed oczami. A jak widze potem w action listenerze ify czy case to robi mi sie powoli słabo.

Czy żeby dostać szukaną liczbę

Ale szukaną liczbę czego? Zliczyłaś w mapie wystąpienia wszystkich liter z tekstu, mapa zawiera coś w stylu A->10, B->11, C->5,.... Nadal nie wiemy co ty właściwie chcesz wyświetlić.

0

Chodzi o zwrócenie ilości znaków w całym tekście. Używam addActionListener(this) ponieważ mój prowadzący od ćwiczeń tłumaczył to w taki sposób i tylko tego używał na ćwiczeniach.

0

zwrócenie ilości znaków w całym tekście

Możesz napisać nam tu łaskawie UnitTest który pokazuje ten twój use-case? Który pokazuje wyraźnie jaki byłby input i jakiego outputu się spodziewasz? Bo kod wyżej zlicza ile razy wystąpiła każda z liter w tekście, co NIJAK sie ma do ilości znaków w całym tekście

1 użytkowników online, w tym zalogowanych: 0, gości: 1