Avatar billede top Nybegynder
31. maj 2001 - 01:03 Der er 3 kommentarer og
1 løsning

Swing komponenter..

Jeg er ved at lave et program der har flere med et JDesktopPane og flere JInternalFrames.

Mit problem er når jeg har fået lavet et JInternalFrame (der indeholder et billede), kan jeg ikke finde ud af at hente billedet frem så jeg kan arbejde på det (så som det er nu kan jeg kun få det vist :-(

Min kode ser ud som følger:
------
PlanarImage source = JAI.create(\"fileload\", fileName);
        System.out.println(\"height: \" + source.getHeight());
        FileSeekableStream stream = null;
        try {
            stream = new FileSeekableStream(fileName);
        } catch (IOException e) {
            e.printStackTrace();
        }

        /* Create an operator to decode the image file. */
        RenderedOp image = JAI.create(\"stream\", stream);
           

        ImageFrame frame = new ImageFrame(fileName);
 
        ScrollingImagePanel panel = new ScrollingImagePanel(image, image.getHeight(), image.getWidth());
        frame.getContentPane().add(panel); 
        jDesktopPane1.add(frame);

----

ImageFrame er min egen klasse der nedarver fra JInternalFrame.

Hvordan kommer jeg igen i kontakt med mit billede (image), det må være noget med \'jDesktopPane1.getSelectedFrame()...\' et eller andet??


Avatar billede logical Nybegynder
31. maj 2001 - 08:57 #1
JInternalFrame[] all = jDesktopPane1.getAllFrames();
JInternalFrame selected = null;
for (int i = 0 ; i < all.length ; i++) {
  if (all[i].isSelected()) {
      selected = all[i];
      break;
  }
}
if (selected != null) {.....}


Sådan gør man, hvis man vil finde den.

En anden måske mere korrekt måde at gøre tingene på er at adde sig som InternalFrameListener på hver frame, og få et InternalFrameEvent.INTERNAL_FRAME_ACTIVATED, når et vindue bringes i fokus.
Du har så din JInternalFrame i evt.getSource()
Avatar billede top Nybegynder
31. maj 2001 - 09:14 #2
Jeg bruger jo allerede
getSelectedFrame() til at finde det aktive JInternalFrame, men det er indholdet af selve JInternalFrame\'t jeg ikke kan få fat i?

Jeg har flere vinduer åbne på én gang, og funktionen skal derfor trigges af et menupunkt og ikke en INTERNAL_FRAME_ACTIVATED event.

Indrømmet, jeg har så meget styr på Swing, så det kan være det er tågesnak jeg lukker ud?
Avatar billede logical Nybegynder
31. maj 2001 - 09:44 #3
Nej, fint nok så langt, jeg er fuldstændig med.

En JInternalFrame, lige som f.eks. JFrame og JWindow, er en container (java.awt.Container), som kan indeholde et hierarki af andre java.awt.Component\'er eller containere, så lige at få indholdet ud er ikke det nemmeste, men du sagtens sige selected.getComponents(), som giver dig et Component[] med de componenter, der er indeholdt i din JInternalFrame. Man er så ansvarlig for selv at gå dybere, hvis en af componenterne er en container.

Du siger, du har nedarvet til ImageFrame, og ScrollingImagePanel klassen er vist også selvskrevet. Så kan du evt. gøre følgende:

class ImageFrame extends JInternalFrame {
  private Image myImage;

  public void addImage(Image im) {
  myImage = im;
  ScrollImagePanelpanel = new ScrollingImagePanel(im, im.getWidth(), im.getHeight());
  setContentPane(panel); 
  // eller getContentPane().add(panel), hvis der skal flere komponenter i.
  }

  public Image getImage() {
    return myImage;
  }
}

..
Brug addImage til at lægge dit image ind.

....
Brug getImage() til at få billedet igen.
selected = findSelected();
Image im = ((ImageFrame) selected).getImage();
Avatar billede top Nybegynder
31. maj 2001 - 11:00 #4
Yes - nu virker det..

(ScrollingImagePanel kommer i øvrigt fra Java Advanced Imaging)

:-) Dine point er meget fortjente..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester