Вывод изображения на JPanel - Java (241563)

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

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

Добрый вечер! Делаю приложение для вывода выбранной картинки на панель. Но картинка к сожалению не отрисовывается на панели. Помогите пожалуйста разобраться в том, что я делаю не так. Спасибо!
Листинг программы
  1. package saprtest;
  2. import java.awt.BorderLayout;
  3. import java.awt.Color;
  4. import java.awt.Dimension;
  5. import java.awt.Graphics;
  6. import java.awt.Image;
  7. import java.awt.event.ActionEvent;
  8. import java.awt.event.ActionListener;
  9. import java.io.File;
  10. import java.io.FileNotFoundException;
  11. import java.io.IOException;
  12. import javax.imageio.ImageIO;
  13. import javax.swing.JButton;
  14. import javax.swing.JFileChooser;
  15. import javax.swing.JFrame;
  16. import javax.swing.JOptionPane;
  17. import javax.swing.JPanel;
  18. public class SaprTest {
  19. JFrame jf = new JFrame("Тестовое окно");
  20. JPanel jp1 = new JPanel(new BorderLayout());
  21. WorkPanel wp1 = new WorkPanel();
  22. JButton jb1 = new JButton("Открыть");
  23. JButton jb2 = new JButton("Выход");
  24. JOptionPane jop1 = new JOptionPane();
  25.  
  26. public static void main(String[] args) {
  27. SaprTest sp1 = new SaprTest();
  28. sp1.start();
  29. }
  30. public void start (){
  31. jf.setExtendedState(JFrame.MAXIMIZED_BOTH);
  32. jf.setVisible(true);
  33. jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  34. jf.add(jp1, BorderLayout.WEST);
  35. jp1.setSize(100, 100);
  36. jp1.add(jb1, BorderLayout.NORTH);
  37. jb1.addActionListener(new ActionListener() {
  38. @Override
  39. public void actionPerformed(ActionEvent ae) {
  40. JFileChooser openFile = new JFileChooser();
  41. openFile.setDialogTitle("Выбор графической подложки");
  42. openFile.setFileSelectionMode(JFileChooser.FILES_ONLY);
  43. //openFile.setFileFilter(new MyFileFilter(".jpg", ""));
  44. int ret = openFile.showOpenDialog(null);
  45. if (ret == JFileChooser.APPROVE_OPTION){
  46. try {
  47. File file = openFile.getSelectedFile();
  48. Image image = ImageIO.read(file);
  49. Graphics gr = image.getGraphics();
  50. wp1.paintComponent(gr, image);
  51. }
  52. catch (FileNotFoundException ex){
  53. JOptionPane.showMessageDialog(jop1, "Такого файла не существует");
  54. }
  55. catch (IOException ex) {
  56. JOptionPane.showMessageDialog(jop1, "Исключение ввода-вывода");
  57. }
  58. }
  59. }
  60. });
  61. jp1.add(jb2, BorderLayout.SOUTH);
  62. jb2.addActionListener(new ActionListener() {
  63. @Override
  64. public void actionPerformed(ActionEvent ae) {
  65. System.exit(0);
  66. }
  67. });
  68. jf.add(wp1, BorderLayout.CENTER);
  69. wp1.setVisible(true);
  70. //wp1.setBackground(Color.black);
  71. wp1.setPreferredSize(new Dimension(100, 100));
  72. }
  73. }
Листинг программы
  1. package saprtest;
  2. import java.awt.Graphics;
  3. import java.awt.Image;
  4. public class WorkPanel extends javax.swing.JPanel {
  5. @Override
  6. protected void paintComponent (Graphics g) {
  7. super.paintComponent(g);
  8. g.drawImage(null, 0, 0, this);
  9. }
  10. protected void paintComponent(Graphics g, Image img){
  11. super.paintComponent(g);
  12. g.drawImage(img, 0, 0, this);
  13. }
  14. }

Решение задачи: «Вывод изображения на JPanel»

textual
Листинг программы
  1. package javafxpixel;
  2.  
  3. import java.awt.image.BufferedImage;
  4. import java.io.File;
  5. import java.io.IOException;
  6. import java.util.logging.Level;
  7. import java.util.logging.Logger;
  8. import javafx.application.Application;
  9. import javafx.embed.swing.SwingFXUtils;
  10. import javafx.event.ActionEvent;
  11. import javafx.event.EventHandler;
  12. import javafx.scene.Scene;
  13. import javafx.scene.control.Button;
  14. import javafx.scene.image.Image;
  15. import javafx.scene.image.ImageView;
  16. import javafx.scene.layout.VBox;
  17. import javafx.stage.FileChooser;
  18. import javafx.stage.Stage;
  19. import javax.imageio.ImageIO;
  20.  
  21. /**
  22.  * @web [url]http://java-buddy.blogspot.com/[/url]
  23.  */
  24. public class JavaFXPixel extends Application {
  25.    
  26.     ImageView myImageView;
  27.    
  28.     @Override
  29.     public void start(Stage primaryStage) {
  30.        
  31.         Button btnLoad = new Button("Load");
  32.         btnLoad.setOnAction(btnLoadEventListener);
  33.        
  34.         myImageView = new ImageView();        
  35.        
  36.         VBox rootBox = new VBox();
  37.         rootBox.getChildren().addAll(btnLoad, myImageView);
  38.        
  39.         Scene scene = new Scene(rootBox, 300, 300);
  40.        
  41.         primaryStage.setTitle("java-buddy.blogspot.com");
  42.         primaryStage.setScene(scene);
  43.         primaryStage.show();
  44.     }
  45.  
  46.     public static void main(String[] args) {
  47.         launch(args);
  48.     }
  49.    
  50.     EventHandler<ActionEvent> btnLoadEventListener
  51.     = new EventHandler<ActionEvent>(){
  52.  
  53.         @Override
  54.         public void handle(ActionEvent t) {
  55.             FileChooser fileChooser = new FileChooser();
  56.            
  57.             //Set extension filter
  58.             FileChooser.ExtensionFilter extFilterJPG = new FileChooser.ExtensionFilter("JPG files (*.jpg)", "*.JPG");
  59.             FileChooser.ExtensionFilter extFilterPNG = new FileChooser.ExtensionFilter("PNG files (*.png)", "*.PNG");
  60.             fileChooser.getExtensionFilters().addAll(extFilterJPG, extFilterPNG);
  61.              
  62.             //Show open file dialog
  63.             File file = fileChooser.showOpenDialog(null);
  64.                      
  65.             try {
  66.                 BufferedImage bufferedImage = ImageIO.read(file);
  67.                 Image image = SwingFXUtils.toFXImage(bufferedImage, null);
  68.                 myImageView.setImage(image);
  69.             } catch (IOException ex) {
  70.                 Logger.getLogger(JavaFXPixel.class.getName()).log(Level.SEVERE, null, ex);
  71.             }
  72.  
  73.         }
  74.     };
  75. }

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


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

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

7   голосов , оценка 4.429 из 5

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

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

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