Я столкнулся с этой небольшой проблемой, связанной с тем, чтобы сделать мой JCombobox как можно более динамичным.
Например, когда выбран элемент в выпадающем списке, он динамически изменяет количество кнопок в соответствии с количеством дни в месяце и добавляются в панель
Проблема, с которой я сталкиваюсь, заключается в том, что она не меняет автоматически отображение панели, но когда я пыталась увидеть, выполняется ли код в моем журнале консоли. это работает гладко. Я старался изо всех сил, чтобы найти решение, но безрезультатно.
Основная проблема в actionListener, например, если выбран февраль, он отображает 28 кнопок, если выбран январь, он отображает 31 день и т. Д., И т. Д., Но когда я запускаю код, мои состояния system.out.println он работает, но мой графический интерфейс не показывает кнопку.
private static JButton method_Btn(int i){
JButton btn = new JButton(Integer.toString(i));
return btn;
}
public static void day(){
JFrame frame = new JFrame();
JPanel topPanel = new JPanel();
JPanel centerPanel = new JPanel();
JButton days = new JButton();
JLabel days_label = new JLabel();
//-- Top Panel
String month[] = {"--Select Month--" , "January", "February"};
JComboBox month_combo = new JComboBox(month);
topPanel.add(month_combo, BorderLayout.PAGE_START);
//-- Center Panel
centerPanel.setLayout(new FlowLayout());
centerPanel.add(days_label);
//------- Change when jcombo is selected
month_combo.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
if(month_combo.getSelectedItem().equals("January")){
for(int i = 0;i < 31;i++){
centerPanel.add(method_Btn(i));
}
}
if(month_combo.getSelectedItem().equals("February")){
for(int i = 0;i < 28;i++){
centerPanel.add(method_Btn(i));
}
}
}
});
frame.add(topPanel, BorderLayout.PAGE_START);
frame.add(centerPanel , BorderLayout.CENTER);
frame.setSize(400,400);
frame.setVisible(true);
}
public static void main(String[] args){
day();
}
Дополнительное примечание,
Я пришел к выводу, что еще одна проблема, с которой я столкнулся, заключается в том, что она будет складывать количество кнопок, созданных после выбора месяца во второй раз. Как я это решаю, я добавил centerPanel.removeAll (); и centerPanel.repaint ();
month_combo.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
int count = 0;
//---- gettind days of month selected in comboBox
if (month_combo.getSelectedItem().equals("February")) {
centerPanel.removeAll();
centerPanel.repaint();
for (int i = 1; i <= 28; i++) {
centerPanel.add(method_Btn(i));
System.out.println("days in feb " + i);
}
centerPanel.revalidate();
}
if (month_combo.getSelectedItem().equals("March")) {
centerPanel.removeAll();
centerPanel.repaint();
for (int i = 1; i <= 31; i++) {
centerPanel.add(method_Btn(i));
}
centerPanel.revalidate();
}
}
});
Надеюсь, это поможет любому, кто нуждается. :)