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
Musisz nałoży filtr w innym miejscu.
tzn???
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();
}
Jyzef napisał(a)
tzn???
A skąd mam wiedzieć? Nie widzę tego co tam stworzyłeś :D.
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:
- Otwarcie nowego okna.
- 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?
thx za starania ale juz sobie poradzilem :d
Nice.