Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > Java > Desktop-Applikationen und Grafik > JFileChooser in einem Frame mit JInternalFrames, zeichnet sich nicht
Antwort
 
Themen-Optionen
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, 8x aufgerufen)
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.12.2005, 17:15   Nach oben    #2
sparrow
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 567
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  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen 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) { }




 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.12.2005, 17:43   Nach oben    #4
pago
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.091
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  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen 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.
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.12.2005, 18:08   Nach oben    #6
sparrow
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 567
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  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen 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...
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.12.2005, 20:05   Nach oben    #8
pago
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.091
Standard

Nee... Listener werden automatisch im EDT ausgeführt... also mir fällt ehrlich gesagt auch nichts ein.
__________________
Patrick Gotthardts Weblog.
pago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen 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.
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen 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

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

BB-Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are 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 +2. Es ist jetzt 07:21 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.7.2, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.0.0) und vBSEO.

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