Я хочу добавить изображение в JPanel, JPanel находится внутри JInternalFrame, а JInternalFrame имеет родительский JDesktopPane.Добавление изображения в JPanel внутри JInternalFrame
Я попытался с другим классом добавить изображение с пути, а затем, jPanel1 = new Imagen(<String FilePath>);
, класс получит путь в String в конструкторе окна, но он не работает. и я попытался настроить код из initComponents()
, строки jPanel1 = javax.swing.JPanel();
и заменить эту строку на jPanel1 = new Imagen() ;, параметр, который получит конструктор, - это путь к файлу изображения, и этот метод работает нормально, но он запускается только один раз (внутри метода initComponents()), и я не могу (или не знаю), как заменить изображение из JPanel. :(
Проект начинается сначала с JDesptopPane, а затем с одного внутреннего блока (1), из этого внутреннего кадра он показывает другой JInternalFrame (2), из этого внутреннего фрейма, он показывает другой JInternalFrame (3) во внутреннем фрейме 3 , Я хочу найти с помощью кнопки, и JFileChooser, образ и путь, полученный файловым устройством, я хочу установить в качестве параметра в классе Imagen() и установить изображение в JPanel, который встроен в JInternalFrame (. 3)
EDIT 1:. Спасибо за ваши комментарии здесь код JInternalFrame (3), окно конструктора:
public AgregarContacto() {
JFileChooser jf = new JFileChooser();
jf.setDialogTitle("Elija el archivo de Imagen");
int i = jf.showOpenDialog(null);
if (i == JFileChooser.APPROVE_OPTION) {
default1 = jf.getSelectedFile().getAbsolutePath();
}
initComponents();
jPanel1= new Imagen(default1);
for (String llenarMese : p.llenarMeses()) {
Mes.addItem(llenarMese);
}
for (String llenarDia : p.llenarDias31()) {
Dia.addItem(llenarDia);
}
for (String llenarAnios : p.Anios()) {
Anio.addItem(llenarAnios);
}
}
А вот код класса Imagen(), который будет принимать в конструкторе строку:
public class Imagen extends JPanel {
String ruta;
private BufferedImage imag;
public Imagen(String path){
ruta = path;
try{
imag = ImageIO.read(new File("unknown.png"));
}catch(IOException ex){
JOptionPane.showMessageDialog(null, "Error " + ex.getMessage());
}
}
@Override
public void paint(Graphics g){
super.paint(g);
Image Scaledimage = imag.getScaledInstance(this.getWidth(), this.getHeight(), Image.SCALE_SMOOTH);
g.drawImage(Scaledimage, 0, 0, null);
}
}
Я хотел бы помочь, но, к сожалению, не могу загрузить проект из этого места как URL заблокирован в моем офисе. Не могли бы вы написать небольшую тестовую программу - SSCCE? Как вы устанавливаете изображение в панель? Используете ли вы JLabel в качестве контейнера изображений? Если да, избавитесь от всех внутренних фреймов, у вас есть JFrame с JPanel, у которого есть JLabel и кнопка. Когда вы нажимаете кнопку, выберите файл и установите его в метку. Если это работает, повторите его для вашего кода с внутренними кадрами. Остальное опубликуйте здесь код, и я могу помочь. – sethu
Пожалуйста, не отправляйте код в ссылках гораздо меньше, как сжатый огромный сложный файл программы. Если вам нужна помощь здесь, вы должны сначала изолировать проблему в небольшой полностью содержащейся в ней программе, которую вы можете опубликовать здесь, опять же невелик, мы можем скомпилировать, запустить и продемонстрировать вашу проблему для нас, [минимальную примерную программу] (http://sscce.org). –
@sethu Отредактировано. спасибо за ваш комментарий –