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 