I have a little Problem here. I'm currently working at a GUI to organise my series, that im watching/have watched. In this part I wanted a frame to open with all the different genres in JCheckBox
'es, that should return a boolean
-array, where each index represents the genre of this index and the value if it JCheckBox
was clicked.
I decied to do this woth a JOptionPane
, because the JOptioPane.showInputPane()
-funktion offers to give an Object
-array as parameter, that will be displayed in the JOptionPane
. To this point, my code is working perfectly:
String[] genres = IO.getGenres();
JCheckBox[] check = new JCheckBox[genres.length];
for(int i = 0; i < genres.length; i++)
check[i] = new JCheckBox(genres[i]);
boolean[] ret = new boolean[genres.length];
int answer = JOptionPane.showConfirmDialog(null, new Object[]{"Choose gernes:", check}, "Genres" , JOptionPane.OK_CANCEL_OPTION);
if(answer == JOptionPane.OK_OPTION)
{
for(int i = 0; ; i++)
ret[i] = check[i].isSelected();
}else if(answer == JOptionPane.CANCEL_OPTION || answer == JOptionPane.ERROR_MESSAGE)
{
for(int i = 0; i < genres.length; i++)
ret[i] = false;
}
return ret;
The problem is that the JOptionPane
grows to large, with to many genres. So how can I make a scrollable list of JCheckBox
'es, that is displayed in the JOptionPane
? Or is there a better way to work around?
You can simply layout your check boxes in a panel and transfer a wrapping scroll pane to your JOptionPane. Something like this:
JPanel layoutPanel = new JPanel(new GridLayout(genres.length, 1));
for (JCheckBox c : check) {
layoutPanel.add(c);
}
JScrollPane scroller = new JScrollPane(layoutPanel);
scroller.setPreferredSize(new Dimension(300, 500));
int answer = JOptionPane.showConfirmDialog(null, scroller, "Genres" , JOptionPane.OK_CANCEL_OPTION);