Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Java » Systemicons

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
21.04.2006, 19:32 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


Hi zusammen,

Ich suche gerade eine Möglichkeit um in Java das Systemicon eines bestimmten Dateityps herauszubekommen und anzeigen zu lassen.
Beisielsweise dieses Icon zu einer .wmv Datei: www.mnnonline.org/graphics/wmv-icon.gif
Benutzen tu ich Swing.
Danke schonmal im Vorraus für eure Hilfe !
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.04.2006, 19:44 Uhr
mauralix



Da kann ich zwar nicht helfen...
Aber mich würde schon interessieren wie ich das Icon der Application ändern kann.
--
nur olfaktorisch fassbar....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
21.04.2006, 21:20 Uhr
KaraHead



Die einzige portable Möglichkeit wäre es die Methode FileSystemView#getSystemIcon(File f) zu benutzen, wenn dich das nicht zufrieden stellt, dann musst du auf JNI zurückgreifen.

Gruß KaraHead
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
21.04.2006, 21:24 Uhr
KaraHead



@mauralix
Guck dir mal die Methode JFrame#setIconImage(Image image) an.


C++:
...
JFrame mainFrame = new JFrame("Hauptfenster");
ImageIcon image = new ImageIcon("app.gif");
mainFrame.setIconImage(image.getImage());
...

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
22.04.2006, 01:38 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


Erstmal danke Karahead, das war das, was ich gesucht hatte.
Allerdings wollte ich das Icon in einer JList darstellen.
Das funktioniert auch soweit. Nur geht dann die Selektion der einzelnen Einträge nicht mehr ...
Gefüllt bekomm ihr die Liste, indem ihr einfach die Files darauf zieht !
Hier der Code:

C++:
import java.awt.Color;
import java.awt.Component;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetDragEvent;
import java.awt.dnd.DropTargetDropEvent;
import java.awt.dnd.DropTargetEvent;
import java.awt.dnd.DropTargetListener;
import java.io.File;
import java.util.List;

import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
import javax.swing.filechooser.FileSystemView;

public class DropList extends JList implements ListCellRenderer
{
    private DefaultListModel model = null;
    private ImageIcon icon = null;
    
    public DropList()
    {
        model = new DefaultListModel();
        this.setModel(model);
        this.setCellRenderer(this);
        DropTargetListener dropTargetListener = new DropTargetListener()
        {

            // Die Maus betritt die Komponente mit
            // einem Objekt
            public void dragEnter(DropTargetDragEvent e)
            {

            }

            // Die Komponente wird verlassen
            public void dragExit(DropTargetEvent e)
            {

            }

            // Die Maus bewegt sich über die Komponente
            public void dragOver(DropTargetDragEvent e)
            {

            }

            public void drop(DropTargetDropEvent e)
            {
                try
                {
                    Transferable tr = e.getTransferable();
                    DataFlavor[] flavors = tr.getTransferDataFlavors();
                    for (int i = 0; i < flavors.length; i++)
                        if (flavors[i].isFlavorJavaFileListType())
                        {
                            // Zunächst annehmen
                            e.acceptDrop(e.getDropAction());
                            List files = (List) tr.getTransferData(flavors[i]);
                            // Wir setzen in das Label den Namen der ersten
                            // Datei
                            model.addElement(files.get(0).toString());
                            e.dropComplete(true);
                            return;
                        }
                }
                catch (Throwable t)
                {
                    t.printStackTrace();
                }
                // Ein Problem ist aufgetreten
                e.rejectDrop();
            }

            // Jemand hat die Art des Drops (Move, Copy, Link)
            // geändert
            public void dropActionChanged(DropTargetDragEvent e)
            {

            }

        };

        DropTarget dropTarget = new DropTarget(this, dropTargetListener);

    }
    
    public Component getListCellRendererComponent(
            JList list,
            Object value,
            int index,
            boolean isSelected,
            boolean cellHasFocus)
        {
            JLabel label = new JLabel();
            File file = new File(value.toString());
            FileSystemView view = FileSystemView.getFileSystemView();
            view.getSystemIcon(file);
            ImageIcon image = (ImageIcon)view.getSystemIcon(file);
            label.setIcon(image);
            label.setText(value.toString());
            setBackground(isSelected ? Color.gray : Color.white);
            setForeground(isSelected ? Color.white : Color.black);
            return label;
        }
    
    public static void main(String args[])
    {
        JFrame MainWindow = new JFrame();
        MainWindow.setSize(250,250);
        
        MainWindow.add(new DropList());
        MainWindow.setVisible(true);
    }
}


--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

Dieser Post wurde am 22.04.2006 um 01:38 Uhr von J-jayz-Z editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
22.04.2006, 11:39 Uhr
KaraHead



Ich hatte mal sowas ähnliches programmiert. Bei mir ging es um eine JList die links JCheckboxes und rechts einen Text in Form von JLabels haben sollte.

Ich habe es so gelöst, dass ich für die JCheckboxes eine JList und für die JLabels eine JList genommen habe. Und die beiden Listen habe ich in einer JComponent gekapselt.
Auch die Items, die das Model zurückgibt, habe ich in einer Klasse gekapselt, die mir dann bei Bedarf Icon und Text zurückgeben.

Aber guck es dir am besten mal an, vielleicht hilft es dir.

C++:

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.ItemSelectable;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.LinkedList;
import java.util.List;

import javax.swing.AbstractListModel;
import javax.swing.ImageIcon;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
import javax.swing.ListModel;
import javax.swing.ListSelectionModel;
import javax.swing.UIManager;
import javax.swing.event.ListSelectionListener;

/**
*
* @author karahead
*
*/

public class CheckList extends JComponent
{
    protected class CheckListItem implements ItemSelectable
    {
        private boolean            checked;
        private int                index;
        private List<ItemListener> listeners = null;
        private String             text      = null;

        public CheckListItem(boolean isChecked, String text, int index)
        {
            this.checked = isChecked;
            this.text = text;
            this.index = index;

            this.listeners = new LinkedList<ItemListener>();
        }

        public void addItemListener(ItemListener listener)
        {
            if (listener != null)
                this.listeners.add(listener);
        }

        protected void fireItemStateChanged()
        {
            for (ItemListener item : this.listeners)
            {
                item.itemStateChanged(new ItemEvent(this,
                        ItemEvent.ITEM_STATE_CHANGED, this,
                        this.isChecked() ? ItemEvent.SELECTED
                                : ItemEvent.DESELECTED));
            }
        }

        public int getIndex()
        {
            return this.index;
        }

        public Object[] getSelectedObjects()
        {
            return null;
        }

        public String getText()
        {
            return this.text;
        }

        public boolean isChecked()
        {
            return this.checked;
        }

        public void removeItemListener(ItemListener l)
        {
            if (l != null)
                this.listeners.remove(l);
        }

        public void setChecked(boolean isChecked)
        {
            this.checked = isChecked;
            this.fireItemStateChanged();
        }
    }
    // -----------------------------------------------------------------

    @SuppressWarnings("serial")
    protected class CheckListModel extends AbstractListModel implements
            ItemListener
    {
        private CheckListItem[] CLI = null;

        public CheckListModel(CheckListItem[] items)
        {
            this.CLI = items;
            for (int i = 0; i < items.length; ++i)
            {
                this.CLI[i].addItemListener(this);
            }
        }

        public Object getElementAt(int index)
        {
            return this.CLI[index];
        }

        public int getSize()
        {
            return this.CLI.length;
        }

        public void itemStateChanged(ItemEvent e)
        {
            if (e.getSource() instanceof CheckListItem)
            {
                CheckListItem cli = (CheckListItem) e.getSource();
                String text = cli.getText();
                ListModel model = CheckList.this.textList.getModel();
                for (int i = 0; i < textList.getModel().getSize(); i++)
                {
                    if (model.getElementAt(i).toString().equals(text))
                        CheckList.this.textList
                                .setSelectedIndex(cli.getIndex());
                }
            }
        }
    }
    // -----------------------------------------------------------------


    @SuppressWarnings("serial")
    protected class CheckListRenderer extends JCheckBox implements
            ListCellRenderer
    {

        public CheckListRenderer()
        {
            setBackground(UIManager.getColor("List.textBackground"));
            setForeground(UIManager.getColor("List.textForeground"));
        }

        public Component getListCellRendererComponent(JList list, Object value,
                int index, boolean isSelected, boolean cellHasFocus)
        {
            CheckListItem check = (CheckListItem) value;
            setSelected(check.isChecked());
            setSelectedIcon(new ImageIcon("res/img/IFLayers/lyrvisible.png"));
            setIcon(new ImageIcon("res/img/IFLayers/lyrinvisible.png"));
            
            return this;
        }
    }

    private static final long serialVersionUID = -5809894969437555295L;

    // --------- nested classes -----------------------

    private JList             checkList        = null;
    private JList             textList         = null;
    private CheckListItem[]   data             = null;

    @SuppressWarnings("serial")
    public CheckList(final String[] items)
    {
        super();
        
        setupData(items, true);

        // CheckList
        checkList = new JList();
        checkList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        checkList.setCellRenderer(new CheckListRenderer());
        checkList.setModel(new CheckListModel(data));
        checkList.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseReleased(MouseEvent e)
            {
                int index = checkList.locationToIndex(e.getPoint());
                if (index != -1)
                {
                    CheckListItem check = (CheckListItem) checkList.getModel()
                            .getElementAt(index);

                    check.setChecked(!check.isChecked());
                    
                    repaint();
                }
            }
        });

        // TextList
        textList = new JList(items);
        textList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        textList.setFixedCellHeight(checkList.getCellBounds(0,0).height);

        // adding
        setLayout(new BorderLayout());
        add(checkList, BorderLayout.WEST);
        add(textList, BorderLayout.CENTER);
    }

    protected JList getCheckList()
    {
        return this.checkList;
    }

    public CheckListItem getElementAt(int i)
    {
        return (CheckListItem) this.checkList.getModel().getElementAt(i);
    }

    public int getSelectedIndex()
    {
        return this.textList.getSelectedIndex();
    }

    protected JList getTextList()
    {
        return this.textList;
    }
    
    /**
     * bereitet übergebene Daten vor
     */

    protected void setupData(final String[] items, boolean initially_checked)
    {
        data = new CheckListItem[items.length];
        for(int i=0; i<items.length; ++i)
        {
            data[i] = new CheckListItem(initially_checked, items[i], i);
        }
    }
    
    // --------
    
    public int getListSize()
    {
        return data.length;
    }
    
    public void setListData(final String[] items, final boolean[] checked)
    {
        data = new CheckListItem[items.length];
        for(int i=0; i<items.length; ++i)
        {
            data[i] = new CheckListItem(checked[i], items[i], i);
        }

        checkList.setModel(new CheckListModel(data));
        textList.setListData(items);
    }
    
    public void setSelectedIndex(int index)
    {
        textList.setSelectedIndex(index);
        checkList.setSelectedIndex(index);
    }
    
    public void addListSelectionListener(ListSelectionListener listener)
    {
        textList.addListSelectionListener(listener);        
    }
}



Du musst nur die JCheckbox-Liste durch eine JLabel-Liste ersetzten, die dir dann die Icons zurückgibt.

Good Luck

Dieser Post wurde am 22.04.2006 um 11:46 Uhr von KaraHead editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
22.04.2006, 13:17 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


Jo, von der vorgehensweise ähnlich wie meines.
Nur funktioniert meins mit einem "normalen" Icon. Wenn ich ein Bild übergebe (das war meine ursprungsidee, ein folder für Ordner und ein Blatt für eine Datei) geht es einwandfrei. Nur mit der von dir vorgeschlagenen Methode nicht (zumindest die Selektion). Irgendwie kann ich mir nicht erklären wieso. Vielleicht holt sich die Methode das Icon nur einmal, wenn man sie aufruft, wird aber öfter benötigt, da die JList bei der aktivierung das icon ja wieder irgendwie hervorheben muss ?!
Irendwie könnte ich mir das nicht andest erklären ...
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
22.04.2006, 13:40 Uhr
KaraHead



Das einzige was mir noch einfallen würde ist, dass du die Methode FileSystemView#getSystemIcon(File f) immer in der Methode getListCellRendererComponent aufrufst. Was mich ein bischen stört.

Versuch mal das Drag&Drop Objekt (oder wie auch immer das heißt ), vollständig in dein Programm zu kopieren, d.h. eine Klasse erstellen, die Icon und Text/Path übernimmt.
Vielleicht stört es Java, das es immer per getSystemIcon(File f) auf's OS zugreifen muss.

Naja mehr fällt mir zur Zeit dazu nicht ein.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
23.04.2006, 19:10 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


Ich hab es mal so versucht, wie du meintest, ist aber immer noch das selbe Problem. Ich sichere jetzt das Icon in einer HashMap außerhalb von getListCellRenderer wie du es meintest. Selbes Problem ...
Hier nochmal der modifizierte Code:

C++:
import java.awt.Color;
import java.awt.Component;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetDragEvent;
import java.awt.dnd.DropTargetDropEvent;
import java.awt.dnd.DropTargetEvent;
import java.awt.dnd.DropTargetListener;
import java.io.File;
import java.util.HashMap;
import java.util.List;

import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
import javax.swing.filechooser.FileSystemView;

public class DropList extends JList implements ListCellRenderer
{
    private DefaultListModel model = null;
    private ImageIcon icon = null;
    private HashMap<String, ImageIcon> hash = new HashMap<String, ImageIcon>();
    private FileSystemView view = FileSystemView.getFileSystemView();

    public DropList()
    {
        model = new DefaultListModel();
        this.setModel(model);
        this.setCellRenderer(this);
        DropTargetListener dropTargetListener = new DropTargetListener()
        {

            // Die Maus betritt die Komponente mit
            // einem Objekt
            public void dragEnter(DropTargetDragEvent e)
            {

            }

            // Die Komponente wird verlassen
            public void dragExit(DropTargetEvent e)
            {

            }

            // Die Maus bewegt sich über die Komponente
            public void dragOver(DropTargetDragEvent e)
            {

            }

            public void drop(DropTargetDropEvent e)
            {
                try
                {
                    Transferable tr = e.getTransferable();
                    DataFlavor[] flavors = tr.getTransferDataFlavors();
                    for (int i = 0; i < flavors.length; i++)
                        if (flavors[i].isFlavorJavaFileListType())
                        {
                            // Zunächst annehmen
                            e.acceptDrop(e.getDropAction());
                            List files = (List) tr.getTransferData(flavors[i]);
                            // Wir setzen in das Label den Namen der ersten
                            // Datei
                            hash.put(files.get(0).toString(), (ImageIcon) view
                                    .getSystemIcon(new File(files.get(0)
                                            .toString())));
                            model.addElement(files.get(0).toString());
                            e.dropComplete(true);
                            return;
                        }
                }
                catch (Throwable t)
                {
                    t.printStackTrace();
                }
                // Ein Problem ist aufgetreten
                e.rejectDrop();
            }

            // Jemand hat die Art des Drops (Move, Copy, Link)
            // geändert
            public void dropActionChanged(DropTargetDragEvent e)
            {

            }

        };

        DropTarget dropTarget = new DropTarget(this, dropTargetListener);

    }

    public Component getListCellRendererComponent(
            JList list,
            Object value,
            int index,
            boolean isSelected,
            boolean cellHasFocus)
    {
        JLabel label = new JLabel();
        label.setIcon(hash.get(value.toString()));
        label.setText(value.toString());
        setBackground(isSelected ? Color.gray : Color.white);
        setForeground(isSelected ? Color.white : Color.black);
        return label;
    }
    
    public static void main(String args[])
    {
        JFrame MainWindow = new JFrame();
        MainWindow.add(new DropList());
        MainWindow.setSize(250, 250);
        MainWindow.setVisible(true);
    }
}



Vielleicht noch eine Idee ? Daran scheint es wohl nicht zu liegen ...
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
23.04.2006, 21:44 Uhr
KaraHead



Der Fehler ist viel trivialer


C++:
public Component getListCellRendererComponent(
            JList list,
            Object value,
            int index,
            boolean isSelected,
            boolean cellHasFocus)
    {
        JLabel label = new JLabel();
        label.setIcon(hash.get(value.toString()));
        label.setText(value.toString());
//Wenn du label weglässt, dann manipulierst du die Farbgebung der ganzen JList und nicht nur der Reihe
        label.setBackground(isSelected ? Color.GRAY : Color.WHITE);
        label.setForeground(isSelected ? Color.RED : Color.BLACK);
        return label;
    }



Gruß KaraHead
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ Java ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: