Portal > Foren > Java > Desktop-Applikationen und Grafik > JFileChooser in einem Frame mit JInternalFrames, zeichnet sich nicht
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 04.12.2005, 17:03 Nach oben    #1
matt
Gast
 
Beiträge: n/a
Standard JFileChooser in einem Frame mit JInternalFrames, zeichnet sich nicht

Hallo!
Ich hab ein echt ärgerliches Problem mit dem JFileChooser von Java. Denn wenn ich diesen starte, dann zeichnet der weder sein eigenes Fenster korrekt, noch den hintergrund.
Ich hab hier ein kleines bild angehängt, wie das aussieht.
Schon mal vielen lieben dank für die hilfe im voraus!
Angehängte Grafiken
Dateityp: jpg JFC.jpg (66,2 KB, 9x aufgerufen)
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.12.2005, 17:15 Nach oben    #2
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 582
Standard

1. geil zu wissen, dass du DSA spielst


2. kann es sein, dass du AWT und Swing Componenten mischt? Dann kommt es immer zu den seltsamsten Fehlern.
Wenn dem nicht so ist, zeig bitte mal ein wenig Code wie du den JFileChooser aufrufst.

Gruß
Sparrow
sparrow ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.12.2005, 17:23 Nach oben    #3
matt
Gast
 
Beiträge: n/a
Standard //////////////////////////////////////////////////

Hehe, was diese kleinen testbildchen immer über eine person verraten, was?
Spielst du etwa auch?


Jedenfalls ist hier der Quellcode. Die imho interessanten Stellen sind mit ganz tollen kommentaren gekennzeichnet, wie etwa hier:
//////////////////////////////////////////////////
// ############################

Wegen AWT/Swing habe ich jetzt nochmal nachgesehen - nein da ist sicherlich nichts von AWT drinnen (außer die notwendigen sachen wie Rectangle, Point, etc.)

PHP-Code:
package metePaint;

import javax.swing.*;
import javax.swing.event.*;
import javax.swing.filechooser.FileFilter;

import metePaint.imageWindow.*;
import metePaint.informationWindow.*;
import java.awt.*;
import java.awt.event.*;
import java.io.File;


import ij.*;
import ij.gui.HistogramWindow;

public class 
MetePaint extends JFrame implements InternalFrameListener {

    protected 
JDesktopPane desktop
    
    protected static 
ImageWindow lastFocusedImage
    protected static 
MetePaint me
    
    
    protected static 
JMenuBar mainMenu
    protected static 
JMenuItem importOptionsaveOptionloadOption
    protected 
int pluginOffset=5
    
    protected class 
ImageFilter extends FileFilter
    
{

        protected 
String allowed[]={"tif","bmp","jpg","gif","png"};
        
        
// This method is from the JAVA tutorial. 
        // http://java.sun.com/docs/books/tutorial/uiswing/components/example-1dot4/ImageFilter.java
        
protected String getExtension(File f) {
            
String ext null;
            
String s f.getName();
            
int i s.lastIndexOf('.');

            if (
&&  s.length() - 1) {
                
ext s.substring(i+1).toLowerCase();
            }
            return 
ext;
        }
        
        public 
boolean accept(File f) {
            if(
f.isDirectory()) return true
            
String ext=getExtension(f);
            for(
int i=0i<allowed.length;i++)
            {
                if(
allowed[i].equals(ext)) return true
            }
            return 
false
        }

        
        public 
String getDescription() {
            return 
"Nur Bilder";
        }
        
    }
    
    
////////////////////////////////////////////////// 
 // ############################
    
protected class ImportOptionAction extends AbstractAction
    
{

        public 
ImportOptionAction()
        {
            
super("Importieren"); 
        }
        
        public 
void actionPerformed(ActionEvent e) {

////////////////////////////////////////////////// 
 // ############################           
            
JFileChooser filePicker=new JFileChooser();
            
filePicker.setFileFilter(new ImageFilter());        
            
int res=filePicker.showOpenDialog(me);                    

            if(
res!=JFileChooser.APPROVE_OPTION) return; 
            
// User pressed cancel or closed the window. 
            
File f=filePicker.getSelectedFile(); 
            
loadPicture(f.getName(),f.getAbsolutePath());
            
        }
        
    }
    
    public 
MetePaint()
    {
        
super("METE Paint");
        
me=this;
        
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        
////////////////////////////////////////////////// 
// ############################
        
desktop=new JDesktopPane(); 
        
desktop.setBackground(Color.GRAY);
        
this.setContentPane(desktop);
        
this.setSize(1024,768);
        
//importOption=new JMenuItem(new ImportOptionAction());
        
        
mainMenu=new JMenuBar();
        
JMenu file = new JMenu("Datei");
        
file.add(new ImportOptionAction());
        
mainMenu.add(file);
        
//mainMenu.add(importOption);
         
        
this.setJMenuBar(mainMenu);
        
        
loadPicture("media/dsa.jpg");
        
loadPicture("media/aventurien.jpg");
        
HistogramInformationWindow h = new HistogramInformationWindow();
        
loadPlugin(h); 
        
loadPlugin(new ResizerWindow());
        
        
//h.repaint();
        
this.setVisible(true);
    }
    
    protected 
void loadPlugin(InformationWindow w)
    {

        
w.setBounds(this.getWidth()-w.getWidth()-10,pluginOffset,w.getWidth(),w.getHeight());
        
pluginOffset+=w.getHeight();
        
desktop.add(w); 
    }
    
    
    public 
void loadPicture(String name,String path)
    {
        
IJ.open(path);
        
lastFocusedImage=new ImageWindow(name,IJ.getImage());
        
desktop.add(lastFocusedImage);
        
lastFocusedImage.moveToFront();
    }
    
    public 
void loadPicture(String path
    {
        
loadPicture(path,path);
    }
    


    public static 
MetePaint getApp()
    {
        return 
me;
    }
    
    public static 
ImageWindow getActiveImageWindow()
    {
        return 
lastFocusedImage;
    }

    public static 
void main(String[] args) {
        
        
MetePaint m=new MetePaint(); 

    }

    public 
void internalFrameActivated(InternalFrameEvent e) {
        
JInternalFrame i=e.getInternalFrame();
        if(
instanceof ImageWindowlastFocusedImage=(ImageWindow)i;
    }

    public 
void internalFrameClosed(InternalFrameEvent arg0) {}

    public 
void internalFrameClosing(InternalFrameEvent arg0) {    }

    public 
void internalFrameDeactivated(InternalFrameEvent arg0) {    }

    public 
void internalFrameDeiconified(InternalFrameEvent arg0) {    }

    public 
void internalFrameIconified(InternalFrameEvent arg0) { }

    public 
void internalFrameOpened(InternalFrameEvent arg0) { }




 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.12.2005, 17:43 Nach oben    #4
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.160
Standard

Hmm... also das auffälligste, was ich finden konnte, war das hier:
Code:
int res=filePicker.showOpenDialog(null);
Im Idealfall solltest du da eine Instanz eines JFrames statt "null" übergeben.

Beispiel:
Code:
int res=filePicker.showOpenDialog(MetePaint.this);
(du kannst nicht direkt auf "this" zugreifen, weil du ja eine innere Klasse verwendest)
__________________
Patrick Gotthardts Weblog.
pago ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.12.2005, 17:53 Nach oben    #5
matt
Gast
 
Beiträge: n/a
Standard

Nunja, das stimmt allerdings, nur das ist nicht der fehler - ursprünglich sah der code so aus, wie von dir vorgeschlagen, ich hatte das nur zu testzwecken geändert. Hat allerdings leider nichts bewirkt.
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.12.2005, 18:08 Nach oben    #6
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 582
Standard

Kapsel das was passieren soll (also das öffnen) in eine eigene Methode und ruf nur die Methode aus dem ActionEvent aus.
Also in etwa so:

ab Zeile 75:
PHP-Code:
       public void actionPerformed(ActionEvent e) {

////////////////////////////////////////////////// 
 // ############################           
            
openFilePicker();
        } 
Und dann an anderer Stelle im Code, entsprechend als private Klassenmethode:

PHP-Code:
private void openFilePicker() {
            
JFileChooser filePicker=new JFileChooser();
            
filePicker.setFileFilter(new ImageFilter());        
            
int res=filePicker.showOpenDialog(this);                    

            if(
res!=JFileChooser.APPROVE_OPTION) return; 
            
// User pressed cancel or closed the window. 
            
File f=filePicker.getSelectedFile(); 
            
loadPicture(f.getName(),f.getAbsolutePath());

Vielleicht funktioniert es so, ich trau der Unterbringung direkt im actionPerformed() immer nicht.


PS:
Hab jahrelang DSA gespielt, ist inzwischen aber (leider) ziemlich eingschlafen.


Gruß
Sparrow
sparrow ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.12.2005, 18:47 Nach oben    #7
matt
Gast
 
Beiträge: n/a
Standard

hm ne, das hilft auch nicht? Könnte es irgendwas mit "Thread Safety" zu tun haben? Das ist das einzige, was mir dazu sonst noch einfällt...
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.12.2005, 20:05 Nach oben    #8
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.160
Standard

Nee... Listener werden automatisch im EDT ausgeführt... also mir fällt ehrlich gesagt auch nichts ein.
__________________
Patrick Gotthardts Weblog.
pago ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.12.2005, 22:21 Nach oben    #9
matt
Gast
 
Beiträge: n/a
Standard

Problem gelöst.
Der Auslöser lag wo anders - hatte an einer anderen Stelle ein bild verwendet, dass einen falschen ImageObserver verwendete. Dadurch ist das bild ständig neugezeichnet worden und hat die JVM einfach so sehr verlangsamt, dass alle anderen Repaints viel zu kurz kamen und der JFileChooser deshalb auch so lange zu laden benötigte.
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Externe Klassen Panel's in einen Frame anzeigen asenodin Desktop-Applikationen und Grafik 3 04.12.2006 01:30
jInternalFrames - wie auf desktopPane adden? SooM Desktop-Applikationen und Grafik 1 29.09.2005 19:42
Frame zeigt keine Menüleiste an WurstBrot Allgemeine Java-Programmierung 2 23.08.2005 15:14
CD und DVD Laufwerke in JFileChooser anzeigen rambozola Desktop-Applikationen und Grafik 3 19.07.2005 15:52


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:40 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45