Проблемы с пользовательской jpanel в NetbeansJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Проблемы с пользовательской jpanel в Netbeans

Сообщение Anonymous »

Добрый день!. Некоторое время у меня возникла проблема: когда я создаю собственную jpanel и добавляю ее в другой проект, все в порядке. Проблема возникает, например, когда я добавляю jlabel в эту jpanel, а затем, когда я сохраняю проект, закрываю netbeans и снова открываю его... изображения jpanel больше нет, и я получаю эту ошибку.
Изображение

Я думаю, что это происходит потому, что ссылка на память объекта изменилась, но я не знаю, как это решить.
Я также хотел бы спросить, есть ли способ заставить изображение, которое я передал в качестве фона в пользовательскую панель jpanel, автоматически адаптироваться к нему. p>
Код прикрепляю здесь:

Код: Выделить всё

package jpanelimagen;

import java.io.File;
import java.io.Serializable;

/**
*
* @author Tarde
*/
public class ImagenFondo implements Serializable {
private File rutaimagen;
private Float opacidad;
private Float saturacion;

public ImagenFondo(File rutaimagen, Float opacidad,Float saturacion) {
this.rutaimagen = rutaimagen;
this.opacidad = opacidad;
this.saturacion=saturacion;
}

public Float getSaturacion() {
return saturacion;
}

public void setSaturacion(Float saturacion) {
this.saturacion = saturacion;
}

public File getRutaimagen() {
return rutaimagen;
}

public void setRutaimagen(File rutaimagen) {
this.rutaimagen = rutaimagen;
}

public Float getOpacidad() {
return opacidad;
}

public void setOpacidad(Float opacidad) {
this.opacidad = opacidad;
}
}

Код: Выделить всё

package jpanelimagen;

import java.io.File;
import javax.swing.JFileChooser;

/**
*
* @author Tarde
*/
public class ImagenFondoPanel extends javax.swing.JPanel {

/**
* Creates new form ImagenFondoPanel
*/
public ImagenFondoPanel() {
initComponents();
}

/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code.  The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// 
private void initComponents() {

jLabelImagen = new javax.swing.JLabel();
jTextFieldRuta = new javax.swing.JTextField();
jButtonAbrirRuta = new javax.swing.JButton();
jLabelOpacidad = new javax.swing.JLabel();
jSliderOpacidad = new javax.swing.JSlider();
jLabelSaturacion = new javax.swing.JLabel();
jSliderSaturacion = new javax.swing.JSlider();

jLabelImagen.setText("Imagen: ");

jTextFieldRuta.setEditable(false);

jButtonAbrirRuta.setText("...");
jButtonAbrirRuta.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonAbrirRutaActionPerformed(evt);
}
});

jLabelOpacidad.setText("Opacidad: ");

jLabelSaturacion.setText("Saturación: ");

jSliderSaturacion.setMaximum(200);
jSliderSaturacion.setToolTipText("");
jSliderSaturacion.setValue(100);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabelImagen, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jTextFieldRuta, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jButtonAbrirRuta))
.addGroup(layout.createSequentialGroup()
.addComponent(jLabelOpacidad, javax.swing.GroupLayout.PREFERRED_SIZE, 87, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jSliderOpacidad, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addComponent(jLabelSaturacion)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jSliderSaturacion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(99, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabelImagen, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jTextFieldRuta, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButtonAbrirRuta))
.addGap(34, 34, 34)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jLabelOpacidad, javax.swing.GroupLayout.PREFERRED_SIZE, 24, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jSliderOpacidad, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(26, 26, 26)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabelSaturacion)
.addComponent(jSliderSaturacion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(150, Short.MAX_VALUE))
);
}// 

private void jButtonAbrirRutaActionPerformed(java.awt.event.ActionEvent evt) {
JFileChooser fileChooser= new JFileChooser();
int resultado=fileChooser.showOpenDialog(this);

if(resultado== JFileChooser.APPROVE_OPTION){
File file=fileChooser.getSelectedFile();
jTextFieldRuta.setText(file.getAbsolutePath());
}
}

public ImagenFondo getSelectedValue(){
File f= new File(jTextFieldRuta.getText());
Float opacidad = jSliderOpacidad.getValue()/100f;
Float saturacion=jSliderSaturacion.getValue()/100f;
return new ImagenFondo(f,opacidad,saturacion);
}

// Variables declaration - do not modify
private javax.swing.JButton jButtonAbrirRuta;
private javax.swing.JLabel jLabelImagen;
private javax.swing.JLabel jLabelOpacidad;
private javax.swing.JLabel jLabelSaturacion;
private javax.swing.JSlider jSliderOpacidad;
private javax.swing.JSlider jSliderSaturacion;
private javax.swing.JTextField jTextFieldRuta;
// End of variables declaration
}

Код: Выделить всё

package jpanelimagen;

import java.awt.Component;
import java.beans.PropertyEditorSupport;
import java.io.File;

/**
*
* @author Tarde
*/
public class ImagenFondoPropertyEditorSupport extends PropertyEditorSupport {

private ImagenFondoPanel imagenFondoPanel = new ImagenFondoPanel();

@Override
public boolean supportsCustomEditor() {
return true; //To change body of generated methods, choose Tools | Templates.
}

@Override
public Component getCustomEditor() {
return imagenFondoPanel; //To change body of generated methods, choose Tools | Templates.
}

@Override
public String getJavaInitializationString() {
ImagenFondo imagenFondo= imagenFondoPanel.getSelectedValue();

File rutaImagen = imagenFondo.getRutaimagen();
String ruta = rutaImagen.getAbsolutePath().replace("\\", "/");
return "new jpanelimagen.ImagenFondo(new java.io.File(\"" + ruta + "\"), "
+ imagenFondo.getOpacidad() + "f, "
+ imagenFondo.getSaturacion() + "f)";

}

@Override
public Object getValue() {
return imagenFondoPanel.getSelectedValue(); //To change body of generated methods, choose Tools | Templates.
}

}

Код: Выделить всё

package jpanelimagen;

import java.awt.AlphaComposite;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.awt.image.RescaleOp;
import java.io.IOException;
import java.io.Serializable;
import javax.imageio.ImageIO;
import javax.swing.JPanel;

/**
*
* @author Tarde
*/
public class JPanelImagen extends JPanel implements Serializable {

/**
* @param args the command line arguments
*/
private ImagenFondo imagenFondo;

public ImagenFondo getImagenFondo() {
return imagenFondo;
}

public void setImagenFondo(ImagenFondo imagenFondo) {
this.imagenFondo = imagenFondo;
repaint(); //volvemos a dibujar si se elige otra imagen de fondo
}

@Override
protected void paintComponent(Graphics grphcs) {
super.paintComponent(grphcs); //To change body of generated methods, choose Tools | Templates.
if(imagenFondo!=null){

if (imagenFondo.getRutaimagen() != null &&  imagenFondo.getRutaimagen().exists()) {

try{
//Cargar la imagen desde el archivo
BufferedImage b=ImageIO.read(imagenFondo.getRutaimagen());

//verificar si la imagen es indexada y convertir a RGB si no es asi
if(b.getType()==BufferedImage.TYPE_BYTE_INDEXED){
BufferedImage rgb=new BufferedImage(b.getWidth(), b.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D g2d=rgb.createGraphics();
g2d.drawImage(b, 0,0, null);
g2d.dispose();
b=rgb;
}
//Ajuste de saturacion
float saturacion=imagenFondo.getSaturacion();
RescaleOp op=new RescaleOp(saturacion,1f,null);

//generamos la imagen ajustada medianteun "snapshot" de imageview
BufferedImage ad=op.filter(b, null);

Graphics2D g2d = (Graphics2D) grphcs;
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, imagenFondo.getOpacidad()));
g2d.drawImage(ad, 0, 0, null);
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1));
}catch(IOException e){
e.printStackTrace();
}
}
}

}
}
И еще есть сгенерированный класс "jpanelbeaninfo", вот так выглядит проблема:
[img]https://i .sstatic.net/FyBKGkZV.png[/img]

Кажется, изображение есть, но когда я запускаю файл, оно не появляется, и над всплывающим окном отображается ошибка

Подробнее здесь: https://stackoverflow.com/questions/791 ... n-netbeans
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»