JComboBox: кнопка в выпадающем списке для выбора элемента - Java
Формулировка задачи:
Доброго времени суток.
Пытаюсь сделать следующее: имеется экземпляр JComboBox. При нажатии на него выпадает список неких элементов. Мне нужно чтобы под списком элементов (именно под, а не в нем самом) также появлялась кнопка. Для чего нужна эта кнопка: в выпадающем списке содержатся картинки. Добавляться новые картинки должны следующим образом: при нажатии на кнопку открывается выбор фалов, пользователь выбирает на своем компьютере нужное изображение и оно заносится в экземпляр JComboBox.
Как отображать картинки в JComboBox, реализовать выбор файла - я разобрался. Но не могу добавить кнопку так, чтобы она находилась не в списке картинок, а под ним и к тому же была активной. Пожалуйста подскажите как это можно сделать.
Решение задачи: «JComboBox: кнопка в выпадающем списке для выбора элемента»
textual
Листинг программы
import javax.swing.*;
import javax.swing.filechooser.FileFilter;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
public class JCFrame extends JFrame {
private String path = "C:\\Temp\\images";
private JFileChooser jFileChooser = new JFileChooser(path);
MyComboBox mc = new MyComboBox();
public void selectFile() {
jFileChooser.setFileFilter(new FileFilter() {
@Override
public boolean accept(File f) {
if (f.isDirectory()) {
return true;
} else {
String fileName = f.getName().toLowerCase();
return fileName.endsWith(".jpg") || fileName.endsWith(".jpeg");
}
}
@Override
public String getDescription() {
return "*.jpg";
}
});
int result = jFileChooser.showOpenDialog(JCFrame.this);
if (result == JFileChooser.APPROVE_OPTION) {
String fileName = jFileChooser.getSelectedFile().getPath();
fileName = fileName.replaceAll("(.*\\\\)", "");
mc.add(fileName,jFileChooser.getSelectedFile().getPath());
}
if (result == JFileChooser.CANCEL_OPTION) {
}
}
public JCFrame() throws HeadlessException {
JPanel jPanel = new JPanel(new GridLayout(1, 2));
// jPanel.add(new JPanel());
// jPanel.add(new JPanel());
jPanel.add(new JPanel());
mc.add("button",path+"\\button.jpg");
mc.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JComboBox jc = (JComboBox)e.getSource();
if (jc.getSelectedItem() == null) {
return;
}
if(jc.getSelectedItem().equals("button")){
System.out.println("button pressed");
selectFile();
}
}
});
jPanel.add(mc);
add(jPanel, BorderLayout.NORTH);
}
public static void main(String[] args) {
JCFrame frame = new JCFrame();
frame.setSize(400, 200);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}