JComboBox: кнопка в выпадающем списке для выбора элемента - Java

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. Пытаюсь сделать следующее: имеется экземпляр JComboBox. При нажатии на него выпадает список неких элементов. Мне нужно чтобы под списком элементов (именно под, а не в нем самом) также появлялась кнопка. Для чего нужна эта кнопка: в выпадающем списке содержатся картинки. Добавляться новые картинки должны следующим образом: при нажатии на кнопку открывается выбор фалов, пользователь выбирает на своем компьютере нужное изображение и оно заносится в экземпляр JComboBox. Как отображать картинки в JComboBox, реализовать выбор файла - я разобрался. Но не могу добавить кнопку так, чтобы она находилась не в списке картинок, а под ним и к тому же была активной. Пожалуйста подскажите как это можно сделать.

Решение задачи: «JComboBox: кнопка в выпадающем списке для выбора элемента»

textual
Листинг программы
  1. import javax.swing.*;
  2. import javax.swing.filechooser.FileFilter;
  3. import java.awt.*;
  4. import java.awt.event.ActionEvent;
  5. import java.awt.event.ActionListener;
  6. import java.io.File;
  7.  
  8. public class JCFrame extends JFrame {
  9.     private String path = "C:\\Temp\\images";
  10.     private JFileChooser jFileChooser = new JFileChooser(path);
  11.     MyComboBox mc = new MyComboBox();
  12.  
  13.  
  14.     public void selectFile() {
  15.         jFileChooser.setFileFilter(new FileFilter() {
  16.             @Override
  17.             public boolean accept(File f) {
  18.                 if (f.isDirectory()) {
  19.                     return true;
  20.                 } else {
  21.                     String fileName = f.getName().toLowerCase();
  22.                     return fileName.endsWith(".jpg") || fileName.endsWith(".jpeg");
  23.                 }
  24.             }
  25.  
  26.             @Override
  27.             public String getDescription() {
  28.                 return "*.jpg";
  29.             }
  30.         });
  31.         int result = jFileChooser.showOpenDialog(JCFrame.this);
  32.         if (result == JFileChooser.APPROVE_OPTION) {
  33.             String fileName = jFileChooser.getSelectedFile().getPath();
  34.             fileName = fileName.replaceAll("(.*\\\\)", "");
  35.             mc.add(fileName,jFileChooser.getSelectedFile().getPath());
  36.         }
  37.         if (result == JFileChooser.CANCEL_OPTION) {
  38.  
  39.         }
  40.  
  41.  
  42.     }
  43.  
  44.     public JCFrame() throws HeadlessException {
  45.  
  46.         JPanel jPanel = new JPanel(new GridLayout(1, 2));
  47.       //  jPanel.add(new JPanel());
  48.       //  jPanel.add(new JPanel());
  49.         jPanel.add(new JPanel());
  50.  
  51.         mc.add("button",path+"\\button.jpg");
  52.         mc.addActionListener(new ActionListener() {
  53.             @Override
  54.             public void actionPerformed(ActionEvent e) {
  55.                 JComboBox jc = (JComboBox)e.getSource();
  56.                 if (jc.getSelectedItem() == null) {
  57.                     return;
  58.                 }
  59.                 if(jc.getSelectedItem().equals("button")){
  60.                     System.out.println("button pressed");
  61.                     selectFile();
  62.  
  63.                 }
  64.             }
  65.         });
  66.         jPanel.add(mc);
  67.         add(jPanel, BorderLayout.NORTH);
  68.     }
  69.  
  70.     public static void main(String[] args) {
  71.         JCFrame frame = new JCFrame();
  72.         frame.setSize(400, 200);
  73.         frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  74.         frame.setLocationRelativeTo(null);
  75.         frame.setVisible(true);
  76.     }
  77.  
  78. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.111 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы