Auf Thema antworten

Moin,


ich versuche gerade Labels dynamisch beim Laden eines Fenstern zu erzeugen, benutze dafür eine HashMap.


Hier mal mein aktueller Code (das ganze GroupLayout-Zeug is generierter Code vom Designer):


[code=Java]package gui;


import java.awt.Cursor;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.io.IOException;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;


import rankingEngine.QueryResult;

import javax.swing.JLabel;

import javax.swing.GroupLayout;

import javax.swing.GroupLayout.Alignment;

import java.awt.Color;


public class ResultWindow extends javax.swing.JFrame

{

   

   

    List<QueryResult> list;

   

    public ResultWindow(List<QueryResult> list)

    {

        getContentPane().setBackground(Color.WHITE);       

        //this.list = list;

        QueryResult result = new QueryResult();

        result.setUrl("www.google.de");

        result.setTitle("Google");

        list.add(result);       

        result.setUrl("www.wikipedia.de");

        result.setTitle("Wikipedia");

        list.add(result);

       

        GroupLayout groupLayout = new GroupLayout(getContentPane());

       

        int counter = 0;

        HashMap<Integer,JLabel> map = new HashMap<Integer,JLabel>();

       

        for(QueryResult item: list)

        {

            final String strURL = item.getUrl();

           

           

            JLabel label = new JLabel("<html><body><a href="+item.getUrl()+">"+item.getTitle()+"</a></body></html>");

            map.put(counter, label);

            map.get(counter).setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));

            map.get(counter).addMouseListener(new MouseAdapter()

            {

                @Override

                public void mouseClicked(MouseEvent e)

                {

                   if (e.getClickCount() > 0)

                   {

                       // Browseraufruf (für Windows):

                       try

                       {

                           Runtime.getRuntime().exec("cmd.exe /c start "+strURL);

                       }

                       catch (IOException e1)

                       {

                           // TODO Auto-generated catch block

                           e1.printStackTrace();

                       }

                   }

                 }

            });

        groupLayout.setHorizontalGroup(

            groupLayout.createParallelGroup(Alignment.LEADING)

                .addGroup(groupLayout.createSequentialGroup()

                    .addGap(20)

                    .addComponent(map.get(counter), GroupLayout.PREFERRED_SIZE, 388, GroupLayout.PREFERRED_SIZE)

                    .addContainerGap(26, Short.MAX_VALUE))

        );

        groupLayout.setVerticalGroup(

            groupLayout.createParallelGroup(Alignment.LEADING)

                .addGroup(groupLayout.createSequentialGroup()

                    .addContainerGap()

                    .addComponent(map.get(counter))

                    .addContainerGap(237, Short.MAX_VALUE))

        );

        getContentPane().setLayout(groupLayout);

       

        counter++;

        }

    }

   

   

    public static void main(String[] args)

    {

        List<QueryResult> list = new ArrayList<QueryResult>();

       

        ResultWindow window = new ResultWindow(list);

        window.setVisible(true);

    }

}

[/code]


Bei

[code=Java]

window.setVisible(true);

[/code]


schmeißt er mir dann ne IllegalStateException. Kann mir da grad keinen Reim drauf machen, vielleicht könnt ihr mir weiterhelfen?


Danke schonmal :)



Oben