2014-10-16 2 views
0

У меня здесь небольшая проблема. В настоящее время я работаю в графическом интерфейсе, чтобы организовать свою серию, которую я смотрел/смотрел. В этой части я хотел, чтобы фрейм открывался со всеми разными жанрами в JCheckBox 'es, который должен возвращать boolean -array, где каждый индекс представляет жанр этого индекса и значение, если было нажато JCheckBox.Java JOptionPane с прокручиваемым списком checkbox

Я decied сделать это Cо спаренной JOptionPane, потому что JOptioPane.showInputPane() -funktion предлагает с получением Object -array в качестве параметра, которое будет отображаться в JOptionPane. С этой точки, мой код работает отлично:

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; 

Проблема заключается в том, что JOptionPane вырастает до больших, с ко многим жанрам. Итак, как я могу сделать прокручиваемый список JCheckBox 'es, который отображается в JOptionPane? Или есть лучший способ обойти?

ответ

2

Вы можете просто поместить свои флажки в панель и перенести панель прокрутки на свою JOptionPane. Что-то вроде этого:

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); 
+0

Спасибо за быструю помощь, она работает: D – TheJustikar1996

+0

[Не используйте 'setPreferredSize()', когда вы на самом деле означает для переопределения 'GetPreferredSize()'] (HTTP: // StackOverflow. ком/кв/7229226/230513). – trashgod

Смежные вопросы