[Java] Frage zu Fensterfokus und Image-Klasse

alphacast

Ensign
Registriert
Apr. 2004
Beiträge
250
Hallo,

ich suche jetzt seit Stunden im Netz, aber so das richtige "AHA"-Erlebnis hatte ich noch nicht: Ich habe ein Desktop-Pane mit einer bestimmten Anzahl an JInternalFrames (also Kindfenstern).

Außerdem habe ich einen FileChooser zum Abspeichern. Der Punkt ist, dass ich keine Ahnung habe, wie ich an die Member des gerade aktiven (fokussierten) JInternalFrames herankomme.

Gibt es da eine Möglichkeit, dass man sich das momentan fokussierte Objekt (JInternalFrame) des DesktopPanes holt?

Zweite Frage: Ich habe in einem Objekt der Klasse Image ein Foto. Wie operiere ich auf Pixelebene mit dem Bild? Spezielle Methoden hab ich da nicht gefunden.

Danke für die Hülfe! :p
 
Für die Sache mit den Bildern ist javax.imageio.ImageReader zuständig. Hab mal die java Files aus der Uni hochgeladen. Da mussten wir mal Bildmanipulation machen. Vielleicht kannste ja wat mit anfangen! Aber no Garantie dat das alles noch läuft *g
 

Anhänge

Zuletzt bearbeitet:
Es gibt eine Methode namens getSelectedFrame(), die muss ich irgendwie übersehen haben. :)

Edit: Danke, mit der Image 2 BufferedImage Methode konnte ich was anfangen. Weiß zufällig jemand, ob man den JSlider auch ohne Slider implementieren kann, d.h. ich brauche eigentlich nur eine variable Skala. Gibts da was?
 
Zuletzt bearbeitet:
Sry, hab zwar keine Antwort auf deine Frage aber selbst eine neue, für die ich keinen neuen Thread öffnen möchte, also, ganz simpel:

Ich möchte animierte gif-Bilder zeichnen, dazu verwende ich:

Code:
img = this.getToolkit().getImage(this.getClass().getResource(file));
g.drawImage(img,j*70,i*70,null);

Nur, dass die Bilder dann still stehen...
Wenn ich in einer Schleife repaint() aufrufe sieht dies allerdings nicht besonders schön aus (bei 63 Grafiken). Da gibts doch bestimmt eine einfachere Lösung! Thx for Help!
 
Hey
Code:
ImageIcon m_icon = new ImageIcon(Toolkit.getDefaultToolkit().getImage(ClassLoader.getSystemResource("img/image.GIF")),"name");
	
JLabel m_label=new JLabel();
m_label.setIcon(m_icon);

Animierte Gifs, so wie ich es bisher angewand habe, brauchen eigentlich nicht aktualisiert werden.

ich würde repaint nicht in einer schleife ausführen, erst wenn sie beendet ist einmal.
 
Ich kriegs einfach nicht auf die Reihe. :(
Ich will einfach nur 63 Smileys in einem 8x8-Gitter ausgeben.

Kann mir jemand sagen woran es happert?

Code:
/*
 * Smiley.java
 *
 * Created on 10. April 2006, 14:36
 */

package smiley;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

/**
 *
 * @author  Hannes
 */
public class Smiley extends javax.swing.JFrame {
    
    /**
     * Creates new form Smiley
     */
    public Smiley() {
        super("QIP psYNovA-Skin Smileys");
        InitWindowListener();
        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.
     */
    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">
    private void initComponents() {
        jPanel1 = new javax.swing.JPanel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setResizable(false);
        jPanel1.setLayout(new java.awt.GridLayout(8, 8));

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(org.jdesktop.layout.GroupLayout.TRAILING, jPanel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 570, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(org.jdesktop.layout.GroupLayout.TRAILING, jPanel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 571, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
        );
        pack();
    }// </editor-fold>
    
    public void InitWindowListener() {
        this.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                //      if (JOptionPane.showConfirmDialog(null, "Aufgeben und beenden?", "Spielende", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION)
                System.exit(0);
            }
        });
    }
    
    public void paint(Graphics g) {
        super.paint(g);
        
        Image img;
        char c1 = 'a', c2 = 'a';
        String file;
        
        for (int i = 0; i < 8; i++) {
            for (int j = 0; j < 8 && !(i == 7 && j == 7); j++) {
                file = Character.toString(c1)+Character.toString(c2)+".gif";
                System.out.println(file);

//                Ursprüngliche Methode: Smileys werden nicht animiert dargestellt
//                img = this.getToolkit().getImage(this.getClass().getResource(file));
//                g.drawImage(img,j*70,i*70,null);
   
//                2. Methode: Funktioniert nicht (??)
//                ImageIcon m_icon = new ImageIcon(this.getToolkit().getImage(this.getClass().getResource(file)));
//                JLabel m_label=new JLabel("text");
//                m_label.setIcon(m_icon);
//                jPanel1.add(m_label);
                
//              3. Methode
//              aa.gif
//              Uncaught error fetching image:
//              java.lang.NullPointerException

                ImageIcon m_icon = new ImageIcon(Toolkit.getDefaultToolkit().getImage(ClassLoader.getSystemResource(file)),file);
                JLabel m_label=new JLabel();
                m_label.setIcon(m_icon);
                
                jPanel1.add(m_label);
                
                if (++c2 > 'z') {
                    c2 = 'a';
                    c1++;
                }
            }
        }
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Smiley().setVisible(true);
            }
        });
    }
    
    // Variables declaration - do not modify
    private javax.swing.JPanel jPanel1;
    // End of variables declaration
    
}


Die zugehörigen Bild-Dateien aa.gif - ck.gif befinden sich im build\classes\smiley-Ordner von Netbeans 5.
 
Zuletzt bearbeitet:
das beispiel macht 16 Bilder 2*8, hatte keine lust mehr Bilder zu testen
Code:
/*
 * Smiley.java
 *
 * Created on 10. April 2006, 14:36
 */

import java.awt.*;
import javax.swing.*;

/**
 *
 * @author  Hannes
 */
public class Smiley extends javax.swing.JFrame {
    private Container m_cp;
    private javax.swing.JPanel jPanel1;
    
    /**
     * Creates new form Smiley
     */
    public Smiley() {
        super("QIP psYNovA-Skin Smileys");
        initComponents();
    }

    private void initComponents() {
    	setSize(new Dimension(300,400));
    	m_cp=getContentPane();
        jPanel1 = new javax.swing.JPanel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        jPanel1.setLayout(new java.awt.GridLayout(8, 8));
        m_cp.add(jPanel1);	

    }
    
    public void paint(Graphics g) {
    	super.paint(g);
    	jPanel1.removeAll();
    	
        String file;
        ImageIcon icon;
        JLabel label;
        
        for (int i = 0; i < 16; i++) {
                file = "a"+i+".gif";
                System.out.println(file);
                icon = new ImageIcon(Toolkit.getDefaultToolkit().getImage(ClassLoader.getSystemResource(file)),file);
                label=new JLabel("test");
                label.setIcon(icon);
                
                jPanel1.add(label);
          
        }
    }

    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        new Smiley().setVisible(true);
    }
    
}
 
ne verbesserung Darstellung war nicht ganz in Ordnung
PHP:
import java.awt.*;
import javax.swing.*;

public class Smiley extends javax.swing.JFrame {
    private Container m_cp;
    private javax.swing.JPanel jPanel1;
    
    /**
     * Creates new form Smiley
     */
    public Smiley() {
        super("QIP psYNovA-Skin Smileys");
        initComponents();
    }

    private void initComponents() {
    	setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    	setResizable(false);
    	m_cp=getContentPane();
    	
        jPanel1 = new javax.swing.JPanel();
        jPanel1.setLayout(new java.awt.GridLayout(8, 8));
        m_cp.add(jPanel1);	
        
        viewImages();
        pack();
    }
    
    private void viewImages() {
		jPanel1.removeAll();

		String file;
		ImageIcon icon;
		JLabel label;
		for (int i = 0; i < 16; i++) {
			file = "a" + i + ".gif";
			icon = new ImageIcon(Toolkit.getDefaultToolkit().getImage(
					ClassLoader.getSystemResource(file)), file);
			label = new JLabel(file);
			label.setIcon(icon);
			jPanel1.add(label);
		}
		jPanel1.validate();
	}
    
    public void paint(Graphics g) {
    	super.paint(g);
    	viewImages();
    }
    
    public static void main(String args[]) {
        Smiley smiley =new Smiley();
        smiley.setVisible(true);
    }
}
 

Anhänge

Danke, das läuft jetzt endlich.
Hab vorhin die gifs neben dem build\classes\smiley-Ordner auch noch in den Ordner build\classes kopiert, hat aber trotzdem nicht geklappt.
Werd jetzt mal schaun, was dran schul war.
 
Zurück
Oben