Мне нужно выбрать изображение с диалоговым окном открытия файла, а затем показать его в окне. Но когда я выбираю изображение, оно не отображается в окне.проблемы с отображением изображения в окне
Я создал класс, который создает окно с jmenubar и 1 jmenuitem. Когда я нажимаю на menuitem, появляется JfileChooser, а затем я выбираю какой-то файл. Но тогда ничего не происходит. Я думаю, что проблема в ActionListener для JFileChooser (ImageFilter является фильтром из DOCS Java)
public Frame(){
//create bars and window
mainframe = new JFrame("Window");
mainframe.setVisible(true);
mainframe.setSize(300, 300);
menubar = new JMenuBar();
mainer = new JMenu("Menu");
menubar.add(mainer);
//create items
item = new JMenuItem("Open",KeyEvent.VK_T);
item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_1, ActionEvent.ALT_MASK));
item.getAccessibleContext().setAccessibleDescription("open image");
//action listener
item.addActionListener(
new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//open file dialog
choser = new JFileChooser();
choser.addChoosableFileFilter(new ImageFilter());
final int returnval = choser.showOpenDialog(menubar);
//action listener for JFileChooser
choser.addActionListener(
new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (returnval == JFileChooser.APPROVE_OPTION){
fc = choser.getSelectedFile();
try{
Panel panel = new ShowImage(fc.getName());
mainframe.getContentPane().add(panel);
}catch(Exception exc){};
}
}
}
);
}
}
);
mainer.add(item);
mainframe.setJMenuBar(menubar);
}
ShowImage класс
class ShowImage extends Panel{
BufferedImage image;
public ShowImage(String imagename) throws IOException {
File input = new File(imagename);
image = ImageIO.read(input);
}
public void paint(Graphics g){
g.drawImage(image,0,0,image.getWidth(),image.getHeight(),null);
}
}
PS Еще одна проблема в том, что он ничего не показывает, пока я не изменить размер окна ,
'SetVisible()/SetSize()' такие вещи должны в самом конце, когда вы добавили товар в контейнер , Поместите эти вещи в конец конструктора, чтобы все работало гладко после того, как 'mainFrame.setJMenuBar (...)', 'setVisible (true)' должен прийти в самом конце, после того как вы добавили все. Если вы не знаете, что лучше попробуйте еще раз изучить учебники Swing. –