 |
11.08.2006, 23:03
| Nach oben
#1 | | Oliver O.
Registriert seit: 17.08.2005
Beiträge: 427
| ImageTree
Hi.
war lang nicht mehr hier, aber jetzt bräucht ich mal wieder eure hilfe...
Ich möchte gerne Bilder auflisten, die teilbilder besitzen.
das heißt, dass ich gern ein Tree brauche, der für jedes große bild ein neuen knoten erstellt, und darunter die teil bilder auflistet.
Da ich aber überhaupt keine Ahnung hab, wie das gehen soll, brauch ich eure ideen, und eure hilfe.
MFG
Xean
|
| |
11.08.2006, 23:06
| Nach oben
#2 | | Benjamin Klaile
Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.516
|
Ist es vielleicht möglich mit einem JTree zu arbeiten und anstatt "Text" Bilder einzusetzen?
Habe jetzt nicht genauer geschaut, war nur so ein Gedanke.
Grüße, Ben.
|
| |
11.08.2006, 23:11
| Nach oben
#3 | | Oliver O.
Registriert seit: 17.08.2005
Beiträge: 427
|
rein in der theorie schon. aber nur wie? die teilbilder sind nur 32x32px groß.
|
| |
12.08.2006, 02:56
| Nach oben
#4 | | Benjamin Klaile
Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.516
|
Hilft dir das hier weiter?
Habe gerade selbst damit etwas rumgespielt .. aber mir fehlt gerade etwas die Konzentration: http://www.java-forum.org/de/viewtopic.php?t=8603
Was du machen könntest bzw. musst (so wie ich das sehe).
Du setzt ein Icon und setzt dann den Text des Nodes auf "". Das wäre eine Art Workaround.
Spiel mal etwas. Vielleicht setze ich mich morgen auch nochmal hin .. oder pago antwortet vorher schon.
Grüße, Ben.
|
| |
12.08.2006, 09:46
| Nach oben
#5 | | Benjamin Klaile
Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.516
|
Nachtrag:
Habe gerade mal etwas gespielt (gerade erst aufgestanden  -) und das hier klappt. PHP-Code: import java.awt.*;
import java.net.URL;
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
public class JTreeDemo extends JPanel {
static final long serialVersionUID = 1;
private JTree tree;
/**
* Default constructor. A layout manager is set and the tree is created.
*/
public JTreeDemo() {
super.setLayout(new GridLayout(1,0));
DefaultMutableTreeNode root =
new DefaultMutableTreeNode("a test tree");
this.createNodes(root);
tree = new JTree(root);
tree.setCellRenderer(new CustomTreeCellRenderer());
//Create the scroll pane and add the tree to it.
JScrollPane scrollPane = new JScrollPane(tree);
Dimension minimumSize = new Dimension(100, 50);
scrollPane.setMinimumSize(minimumSize);
add(scrollPane);
}
/**
* Method that creates the nodes that should be displayed in the tree.
* In this test only categories and sub categories exists.
* It is not possible to have a dynamic node depth.
*
* @param root
*/
private void createNodes(DefaultMutableTreeNode root) {
DefaultMutableTreeNode category = null;
DefaultMutableTreeNode subcategory = null;
// create a first category
category = new DefaultMutableTreeNode("cat1");
// add the category to the tree
root.add(category);
// create some sub categories and add them to the category
subcategory = new DefaultMutableTreeNode("subcat1");
category.add(subcategory);
subcategory = new DefaultMutableTreeNode("subcat2");
category.add(subcategory);
}
/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event-dispatching thread.
*/
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("TreeDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Create and set up the content pane.
JTreeDemo newContentPane = new JTreeDemo();
newContentPane.setOpaque(true); //content panes must be opaque
frame.setContentPane(newContentPane);
//Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
class CustomTreeCellRenderer extends DefaultTreeCellRenderer {
static final long serialVersionUID = 1;
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean selected, boolean expanded, boolean leaf, int row,
boolean hasFocus)
{
super.getTreeCellRendererComponent(tree, value, selected, expanded,
leaf, row, hasFocus
);
String nodeValue = ((DefaultMutableTreeNode) value).getUserObject().toString();
ImageIcon icon = null;
if(nodeValue.equalsIgnoreCase("cat1")) {
icon = createImageIcon("test1.gif");
}
else if(nodeValue.equalsIgnoreCase("subcat1")) {
icon = createImageIcon("test2.gif");
}
else if(nodeValue.equalsIgnoreCase("subcat2")) {
icon = createImageIcon("test3.gif");
}
/*
* Set icon and "delete" text if an icon is define.
* Else do nothing.
*/
if(icon != null) {
setIcon(icon);
setText("");
}
return this;
}
public static ImageIcon createImageIcon(String path) {
URL imgURL = CustomTreeCellRenderer.class.getResource(path);
if(imgURL != null) {
return new ImageIcon(imgURL);
} else {
System.err.println("Couldn't find file: " + path);
return null;
}
}
}
Habe mich dabei etwas an das Java-Tutorial angelehnt. Eigentlich recht simpel zu lösen das Problem, obwohl ich nicht weiß, ob die Nutzung von ImageIcons für sowas gedacht ist. Egal, klappt.
Grüße und guten Morgen, Ben.
|
| |
12.08.2006, 09:54
| Nach oben
#6 | | Projektleiter
Registriert seit: 30.11.2005 Ort: Bottrop
Beiträge: 1.133
|
Ich würd ja gerne, aber ich hab keine Ahnung, was hier das Problem ist.
Geht es darum, wie man ein TreeModel schreibt? Oder um den Renderer (wie in Bens Link)?
|
| |
12.08.2006, 10:00
| Nach oben
#7 | | Benjamin Klaile
Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.516
|
Ich weiß zwar auch nicht, was Teilbilder eines Bilds sind  , aber ich denke doch mal, dass er einen Tree haben will, der nicht mit Text, sondern mit Bildchen bestückt ist.
Egal, ich hab zum ersten Mal mit so 'nem Tree gearbeitet. Hauptsache bisschen was gelernt.
@Xean:
Sollte das nicht das sein, was du suchst, dann beschreib am besten das Problem mal etwas genauer.
Grüße, Ben.
|
| |
12.08.2006, 13:37
| Nach oben
#8 | | Oliver O.
Registriert seit: 17.08.2005
Beiträge: 427
|
ich glaub nicht...
also nochmal:
hier, dass ist so ein bild:
und ich möchte jetzt, dass ich, wenn ich in meinem programm mein großes bild lade, dass zu meinem root element des Trees ein neuer knoten dazu kommt.
das bild heißt "!!!woody.png", deshalb heißt der neue knoten "!!!woody" (als text) und diesem knoten sollen jetzt diese kleinen bildchen (als bild und nicht als text) hinzugefüht werden.
desheißt, dass ich eine methode brauche, die so zb anfängt:
public void addImage(String name, BufferedImage[] imgs){}
name = name des bildes
imgs = die kleinen bildchen.
der Tree sollte dann so aussehen:
root
|-!!!woody
| |- [bild1]
| |- [bild2]
| |- [bild3]
| |- [bild4]
| |- [bild5]
| |- [bild6]
| |- [bild7]
|
|-anderes Bild
| |- [bild1]
| |- [bild2]
| |- [bild3]
| |- [usw]
|
| |
12.08.2006, 18:57
| Nach oben
#9 | | Benjamin Klaile
Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.516
|
Jou,
ähm .. wo genau hakt es denn jetzt? Ich meine .. fertigen Quellcode wirst du wohl eher weniger erhalten.
Bisschen Eigenleistung zeigen.
Im Prinzip ist das, was du haben willst ja nur eine individuelle Erweiterung von dem Code, den ich oben gezeigt habe, oder?
Sofern ich das richtig verstanden habe, was du machen willst.
Du lädst ein Bild, dessen Name der Name eines Knotens ist. Diesem Bild sind weitere Bilder zugeordnet. Das sind dann die Unterknoten (nennt man das so?).
Stell ich mir jetzt gar nicht so schwer vor, was du da vorhast ..
Grüße, Ben.
|
| |
13.08.2006, 16:52
| Nach oben
#10 | | Oliver O.
Registriert seit: 17.08.2005
Beiträge: 427
|
ich hoffe auch, dass es nicht so schwer ist... nur, ich kenn mich überhaubt nicht mit trees aus...
[EDIT]
Habs jetzt hinbekommen:
Geändert von Xean (14.08.2006 um 14:48 Uhr)
|
| | |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | | | | Themen-Optionen | Thema durchsuchen | | | |
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. HTML-Code ist aus. | | | Alle Zeitangaben in WEZ +1. Es ist jetzt 07:02 Uhr.
|