FileDialog ?

Teilzeitphilosoph

Erfahrenes Mitglied
Moinz.
Ich bastel mir gerade n Viewer zusammen, wo ich zwei JPanels hab. Im linken Panel will ich durch Verzeichnisse browsen können. Per Button soll der aktuelle Inhalt dann ins rechte Panel kopiert werden.
Nun hab ich mir sagen lassen, dass es einen FileDialog gibt aber ein extra Fenster wollte ich vermeiden. Gibt es nen Weg, um sich den Inhalt von Verzeichnissen in einem JPanel nice anzeigen lassen und dort browsen zu können?

-bedank-
TZP
 
So, hab schon ein wenig erreicht. Mein JPanel hat jetzt einen JFileChooser bekommen aber da gibt es 2 neue Probleme.
Erstens ist das Teil zu gross und ich kann es nicht skalieren.
Zweitens brauch ich gar nicht so viel Optionen.
Mein Wunsch ist ein einfaches JPanel, das in etwa so was anzeigt:

..
Verzeichnis XX
Verzeichnis XY
Datei.xyz
Datei.xyy
Datei.xzz

wobei die .. dazu sind, um eine Ebene höher zu kommen. Hat Java so was überhaupt?

-bedank-
TZP
 
bau dir doch sowas selber....


so fängste an:
Java:
File[] roots = File.listRoots();

for (File f : roots)
{
   File[] files = f.listFiles();
   for (File aFile : files)
   {
      //do irgend what....
   }
}
Der Code ist vollkommen ungetestet!
Einfach nur mal als kl. Ansatz....

Die Files baust du dir ein ein Tree, dann nen TreeSelectionListener drauf.....
 
So, hab schon ein wenig erreicht. Mein JPanel hat jetzt einen JFileChooser bekommen aber da gibt es 2 neue Probleme.
klingt doch schon ganz gut
Erstens ist das Teil zu gross und ich kann es nicht skalieren.
Zweitens brauch ich gar nicht so viel Optionen.
was meinst Du jetzt mit Skalieren? Wenn es Dir gelungen ist den JFileChooser ordentlich in ein Panel zu bringen, sollte er eigetnlich auch seine Größe entsprechend dem Panel auf dem er liegt anpassen.
vielleicht postest Du mal etws code dazu, dann könnte ich vielleicht weiter helfen.
Mhmm welche Optionen willst Du denn nicht haben?
Mein Wunsch ist ein einfaches JPanel, das in etwa so was anzeigt:
...
Also ich würde sowas wenn es geht nicht selbst bauen, denn einen Filechooser wünwcht man sich als Anwender meist als eine Art Baumstruktur. Sowas kann man nattürlich in Java auch erneut bauen, aber es existiert doch schon, in Form des JFileChoosers.

Interessant finde ich Deinen generellen Anwendungsfall, den ich mir ungefär so vorstelle:
Links eine Quellliste rechts eine Zielliste dazwischen vermutlich in der Mitte Buttens zum hin und her schieben und innerhalb eines Dialoges ein OK zum übernehmen.
Dies kann man recht allgemein halten und hat dann, egal um welche Inhalte es sich dreht, einen entsprechenden Dialog oder Fenster, den man programmatisch immer wieder verwenden kann.
Als kleine Anregung dazu eine Klasse die ich schon sehr oft verwendet habe:
Java:
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;

import javax.swing.BoxLayout;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListCellRenderer;

public class FeatureCollectionPanel extends JPanel
{
    private JScrollPane jScrollPane1 = new JScrollPane();
    private JPanel m_buttonPanel = new JPanel();
    private JScrollPane jScrollPane2 = new JScrollPane();
    private JButton m_hinzuButton = new JButton();
    private JButton m_wegButton = new JButton();
    private JButton allesHinzuButton = new JButton();
    private JButton m_allesWegButton = new JButton();
    private JList m_sourceList = new JList();
    private JList m_goalList = new JList();
    private GridBagLayout gridBagLayout2 = new GridBagLayout();


    public FeatureCollectionPanel()
    {
        try
        {
            jbInit();
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
        }
    }

    private void jbInit() throws Exception
    {
        m_goalList.setModel(new DefaultListModel());
        BoxLayout boxLayout21 = new BoxLayout(this,BoxLayout.X_AXIS);
        this.setLayout(boxLayout21);
        m_buttonPanel.setLayout(gridBagLayout2);
        m_hinzuButton.setText("Hinzufügen");
        m_hinzuButton.addActionListener(new java.awt.event.ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                m_hinzuButton_actionPerformed(e);
            }
        });
        m_wegButton.setText("Entfernen");
        m_wegButton.addActionListener(new java.awt.event.ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                m_wegButton_actionPerformed(e);
            }
        });
        allesHinzuButton.setText("Alles Hinzufügen");
        allesHinzuButton.addActionListener(new java.awt.event.ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                allesHinzuButton_actionPerformed(e);
            }
        });
        m_allesWegButton.setText("Alles Entfernen");
        m_allesWegButton.addActionListener(new java.awt.event.ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                m_allesWegButton_actionPerformed(e);
            }
        });

        jScrollPane1.setMinimumSize(new Dimension(150, 200));
        jScrollPane1.setPreferredSize(new Dimension(150, 200));
        jScrollPane2.setMinimumSize(new Dimension(150, 200));
        jScrollPane2.setPreferredSize(new Dimension(150, 200));
        m_buttonPanel.setMaximumSize(new Dimension(140, 32767));
        m_buttonPanel.setMinimumSize(new Dimension(140, 200));
        m_buttonPanel.setPreferredSize(new Dimension(140, 200));

        this.add(jScrollPane1, null);
        jScrollPane1.getViewport().add(m_sourceList, null);
        this.add(m_buttonPanel, null);
        m_buttonPanel.add(m_hinzuButton,    new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
            ,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0, 0));
        m_buttonPanel.add(m_wegButton,   new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0
            ,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0, 0));
        m_buttonPanel.add(allesHinzuButton,   new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0
            ,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0, 0));
        m_buttonPanel.add(m_allesWegButton,   new GridBagConstraints(0, 3, 1, 1, 0.0, 0.0
            ,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0, 0));
        this.add(jScrollPane2, null);
        jScrollPane2.getViewport().add(m_goalList, null);
    }// end of jbInit()

    public void setFeatureList(java.util.List features)
    {
        DefaultListModel sModel = new DefaultListModel();

        for (int i=0; features!=null && i<features.size(); i++)
        {
            sModel.addElement(features.get(i));
        }
        m_sourceList.setModel(sModel);
    }

    public void setFeatureList(Object[] features)
    {
        DefaultListModel sModel = new DefaultListModel();

        for (int i=0; features !=null && i<features.length; i++)
        {
            sModel.addElement(features[i]);
        }
        m_sourceList.setModel(sModel);
    }

    public Object[] getFeatureList()
    {
        DefaultListModel sModel = (DefaultListModel)m_sourceList.getModel();
        Object[] objekte = new Object[sModel.size()];
        sModel.copyInto(objekte);
        return objekte;
    }

    public void setCellRenderer(ListCellRenderer renderer)
    {
        m_goalList.setCellRenderer(renderer);
        m_sourceList.setCellRenderer(renderer);
    }

    public ListCellRenderer getCellRenderer()
    {
        return m_goalList.getCellRenderer();
    }


    public Object[] getCollectedFeatures()
    {
        DefaultListModel gModel = (DefaultListModel) m_goalList.getModel();
        Object[] objekte = new Object[gModel.size()];
        gModel.copyInto(objekte);
        return objekte;
    }

    public void setCollectedFeatures(java.util.List features)
    {
        DefaultListModel sModel = new DefaultListModel();

        for (int i=0; features!=null && i<features.size(); i++)
        {
            sModel.addElement(features.get(i));
        }
        m_goalList.setModel(sModel);
    }

    public void setCollectedFeatures(Object[] features)
    {
        DefaultListModel sModel = new DefaultListModel();

        for (int i=0; features != null && i<features.length; i++)
        {
            sModel.addElement(features[i]);
        }
        m_goalList.setModel(sModel);
    }

    private void m_hinzuButton_actionPerformed(ActionEvent e)
    {
        Object [] objekte = m_sourceList.getSelectedValues();

        DefaultListModel gModel = (DefaultListModel)m_goalList.getModel();
        for (int i=0; i<objekte.length; i++)
        {
            if (!gModel.contains(objekte[i]))
            {
                gModel.addElement(objekte[i]);
            }
        }
    }

    private void m_wegButton_actionPerformed(ActionEvent e)
    {
        Object [] objekte = m_goalList.getSelectedValues();
        DefaultListModel gModel = (DefaultListModel)m_goalList.getModel();

        for (int i=0; i<objekte.length; i++)
        {
            gModel.removeElement(objekte[i]);
        }
    }

    private void allesHinzuButton_actionPerformed(ActionEvent e)
    {
        Object [] objekte = ((DefaultListModel)m_sourceList.getModel()).toArray();
        DefaultListModel gModel = (DefaultListModel)m_goalList.getModel();
        gModel.clear();
        for (int i=0; i<objekte.length; i++)
        {
            gModel.addElement(objekte[i]);
        }
    }

    private void m_allesWegButton_actionPerformed(ActionEvent e)
    {
        ((DefaultListModel)m_goalList.getModel()).clear();
    }
}// end of class FeatureCollectionPanel

Falls Du Intresse haben solltest auch ein Beispiel zu sehen wo dieses Panel in einen Dialog gesteckt wurde, gib mir bescheid.

wobei die .. dazu sind, um eine Ebene höher zu kommen. Hat Java so was überhaupt?
Das sollte möglich sein indem Du der Liste einen entsprechenden CellEditor verpasst, der halt in die nächste Hierachie drüber springt . Entsprechendes für die Verzeichnisse.
Darstellung von Symbolen (Verzeichnis, Datei-Typen) kann man mit CellRenderern abbilden.

Viel Spaß und Glück
Takidoso
 
Zuletzt bearbeitet:
Da wunder ich mich, warum auf meine letzte Frage gar nix kam und nun stell ich fest, dass mein Beitrag genatzt wurde. Muh.
Na jedenfalls dank ich erst ma für die Vorschläge und werd deine Klasse antesten. Vorher knobel ich noch den Unterschied zwischen JScrollPane und TextArea raus, weil JScrollPane nich auf n JPanel ohne Probleme geaddet werden kann, während TextArea gleich schöne Scrollbalken beinhaltet.

TZP
 
Zurück