JInternalFrame JAVA

0

Siema, tworze ramki wewnetrzne(JInternalFrame) i chcialbym zaladowac do nich obrazki a potem modyfikowac kazde okno osobno ale za chiny nie wychodzi :-[ z tego co mam na razie to laduje obraz do okienka ale jak chce nalozyc jakis filtr na wybrany obraz w oknie to wszystkie modyfikuje i w ogóle masakra:D HELP dla laicusa

0

Musisz nałoży filtr w innym miejscu.

0

tzn???

0

kawalek kodu
img = ImageIO.read(wybor.getSelectedFile());
image = new BufferedImage(img.getWidth(null), img.getHeight(null),
BufferedImage.TYPE_INT_RGB);

  }
  catch (IOException e)
  {
     JOptionPane.showMessageDialog(wybor, e);
  }
           createInternalFrame(image,nazwa);
       }

}

}
//tworzy wewnetrzne ramki pulpitu
public void createInternalFrame(final BufferedImage im, String t)
{
final JInternalFrame iframe = new JInternalFrame(t,
true,//zm rozm
true,//moz zamk
true,//max
true);//zw do ikony

      image.getGraphics().drawImage(img, 0, 0, null);

      JPanel panel = new
              JPanel()
      {
          public void paintComponent(Graphics g)
          {
             
              if (image != null)
                  g.drawImage(image, 0, 0, null);

          }

      };
   iframe.add(panel,BorderLayout.CENTER);
   desktop.add(iframe);


// dodaje obiekt nasluchujacy zamkniecie ramki
iframe.addVetoableChangeListener(new
        VetoableChangeListener()
{
    public void vetoableChange(PropertyChangeEvent zdarzenie)
    throws PropertyVetoException
    {
        String name = zdarzenie.getPropertyName();
        Object value = zdarzenie.getNewValue();

        //sprawdza proby zamkniecia ramki
        if(name.equals("closed")&&value.equals(true))
        {
            //prosi o potwierdznie zamkniecia
            int result = JOptionPane.showInternalConfirmDialog(
                    iframe,"Ok to close?","Select an Option",JOptionPane.YES_NO_OPTION);

            // jesli nie zglasza veto
            if(result != JOptionPane.YES_OPTION)
                throw new PropertyVetoException("User canceled close",zdarzenie);

        }

    }
});
//ustala pozycje ramki
int width = desktop.getWidth()/2;
int height = desktop.getHeight()/2;
iframe.reshape(nextFrameX, nextFrameY, width, height);

 iframe.show();
//wybor ramki moze byc zawetowany
 try
  {
     iframe.setSelected(true);
     iframe.getFocusOwner();
  }
  catch (PropertyVetoException e)
  {}

  frameDistance = iframe.getHeight() - iframe.getContentPane().getHeight();

  //oblicza dystans pomieddzy ramkami
  nextFrameX += frameDistance;
  nextFrameY += frameDistance;
  if (nextFrameX + width > desktop.getWidth()) nextFrameX = 0;
  if (nextFrameY + height > desktop.getHeight()) nextFrameY = 0;

}
i z tego na razie wychodzi ze wczytuje obraz ale do wszytkich czyli zmienia poprzednie, udalo mi sie zmienic zeby do kazdej inny obraz wczytywal ale wtedy nie chce mi w ogóle filtr ruszyc
private void filter(BufferedImageOp op)
{

  if (image == null) return;
  image = op.filter(image, null);
  repaint();

}

0
Jyzef napisał(a)

tzn???

A skąd mam wiedzieć? Nie widzę tego co tam stworzyłeś :D.

0

Ponieważ twierdzisz że createInternalFrame(final BufferedImage im, String t) działa, to nic nam nie da analiza tego kawałka. Wklej całe funkcje odpowiedzialne za:

  1. Otwarcie nowego okna.
  2. Wywołanie filtra

Domniemam że zamieniłeś image na jakąś tablice w której przechowujesz obraz dla każdego Frame'a.
Czy pamiętałeś żeby inne obiekty też były trzymane osobno dla każdego okna?

0

thx za starania ale juz sobie poradzilem :d

0

Nice.

1 użytkowników online, w tym zalogowanych: 0, gości: 1