Auslesen einer XML Datei

Status
Nicht offen für weitere Antworten.

alfonso101

Neues Mitglied
Hallo

Ich habe den folgenden Code geschrieben, um aus einer XML Datei auszulesen, und zwar die Zeilen die mit <Line> </LINE> begrenzt werden. Das Problem ist, wenn es mehrere socher Zeilen hintereinander stehen, dann liest das Programm erst die erste Zeile, warum? Was soll man tun damit man alle solcher Zeilen auslesen kann?!

- <SPEECH>
<SPEAKER>MARCELLUS</SPEAKER>
<LINE>Horatio says 'tis but our fantasy,</LINE>
<LINE>That if again this apparition come,</LINE>
<LINE>He may approve our eyes and speak to it.</LINE>
</SPEECH>

Ein zweites Problem, das ich habe ist: Ich versuche mit Hilfe von hash map zu zählen , wie Oft ein Wort vorkommt; Bei der Zeile : anInteger = new Integer(Integer.parseInt(anInteger + 1));
zeigt mir der Compiler folgendes?!

//"The operato + is undefined for the argument type Integer, int"

Code:
import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import java.io.File;
import org.w3c.dom.Document;
import org.w3c.dom.*; 
import java.util.StringTokenizer;
import java.util.Hashtable;
import java.util.Map;
import java.util.HashMap;
import java.util.WeakHashMap;
import java.util.TreeMap;
import java.util.Iterator;
import java.lang.Integer;


public class HAMLET {
public static void main(String[] args) {
Map map = new HashMap(); // hash table
map = new TreeMap(); 

// Die Datei aufmachen, und Zeile für Zeile auslesen
try {
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document doc = docBuilder.parse (new File("c:/hamlet.xml"));
doc.getDocumentElement ().normalize ();
NodeList listOfLines = doc.getElementsByTagName("SPEECH");
int r = listOfLines.getLength();


//Für jede Zeile, jedes Wort untersuchen
for(int s=0; s<listOfLines.getLength() ; s++){
Node firstLineNode = listOfLines.item(s);
if(firstLineNode.getNodeType() == Node.ELEMENT_NODE){
Element firstLineElement = (Element)firstLineNode; 
NodeList firstNameList = firstLineElement.getElementsByTagName("LINE");
Element firstNameElement = (Element)firstNameList.item(0);
NodeList textFNList = firstNameElement.getChildNodes();
String LineofFile = ((Node)textFNList.item(0)).getNodeValue().trim();
word_by_word_extraction linedecom = new word_by_word_extraction();
String wordsofline[] = linedecom.wordextraction(LineofFile);
int numwordline = wordsofline.length;
for(int gh = 0; gh><numwordline; gh++)
{

//Portstemmer ist eine Klasse die das Stammwort zurückgibt
PorterStemmer termto = new PorterStemmer();
String returenedterm = termto.stem(wordsofline[gh]);
// ubdating the hash MAP
Integer anInteger ;
StringTokenizer st = new StringTokenizer(returenedterm); 
if (map.containsKey(returenedterm)) // key already in Map
{
anInteger = (Integer)map.get(returenedterm);
//"The operato + is undefined for the argument type Integer, int"
anInteger = new Integer(Integer.parseInt(anInteger + 1));
}
else // key doesn't exist yet.
{
// Create new integer indicating one occurrence.
anInteger = new Integer(1);
}
}
}
}
}
catch (Throwable t) {
t.printStackTrace ();
}
// writing out the hash table
Iterator it = map.keySet().iterator();
while (it.hasNext()) {
String s = (String) it.next();
System.out.println(map.get(s) + "\t" + s);
}
}>
Ich Hoffe auf Eure Hilfe,ich habe alles versuch, aber es klappt nicht....
 

André Uhres

Top Contributor
Code:
/*
 * HAMLET_1.java
 */
import java.io.File;
import java.util.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
public class HAMLET_1 {
    public HAMLET_1(){
        File file = new File("c:/hamlet.xml");
        /*
<?xml version="1.0"?>
<HAMLET>
 <SPEECH> 
  <SPEAKER>MARCELLUS</SPEAKER> 
  <LINE>Horatio says 'tis but our fantasy,</LINE> 
  <LINE>That if again this apparition come,</LINE> 
  <LINE>He may approve our eyes and speak to it.</LINE> 
 </SPEECH> 
 <SPEECH> 
  <SPEAKER>ANDRE UHRES</SPEAKER> 
  <LINE>I added the HAMLET tag</LINE> 
  <LINE>Because I think it is needed</LINE> 
  <LINE>To process multiple speeches</LINE> 
 </SPEECH> 
</HAMLET>         
         */
        try {
            DocumentBuilder builder =
                    DocumentBuilderFactory.newInstance().newDocumentBuilder();
            Document doc = builder.parse(file);
            
            NodeList speeches = doc.getElementsByTagName("SPEECH");
            for (int i = 0; i < speeches.getLength(); i++) {
                Element speechElement = (Element)speeches.item(i);
                NodeList speakers = speechElement.getElementsByTagName("SPEAKER");
                Element speakerElement = (Element) speakers.item(0);
                String speaker = getCharacterDataFromElement(speakerElement);
                System.out.println("Speaker: " + speaker);
                NodeList lines = speechElement.getElementsByTagName("LINE");
                for (int j = 0; j < lines.getLength(); j++) {
                    Element lineElement = (Element) lines.item(j);
                    String text = getCharacterDataFromElement(lineElement);
                    System.out.println("Line: " + text);
                    String[] words = text.split(" ");
                    for (int k = 0; k < words.length; k++) {
                        String key = words[k];
                        Integer count = map.put(key, new Integer(1) );
                        if(count != null)
                            map.put(key, new Integer((count.intValue() +1)) );
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        // writing out the map
        for(String s : map.keySet())
            System.out.println(map.get(s) + "\t" + s);
    }
    public static String getCharacterDataFromElement(Element e) {
        Node child = e.getFirstChild();
        if (child instanceof CharacterData) {
            CharacterData cd = (CharacterData) child;
            return cd.getData();
        }
        return "?";
    }
    public static void main(String[] args) { new HAMLET_1(); }
    private Map<String, Integer> map = new TreeMap<String, Integer>();
}
 

licht400

Bekanntes Mitglied
Hallo!

Möchte in einer xml Datei eine Suchindex anlegen!

den Index habe ich schon im Programm realisiert und funktioniert auch.
aber wie schreibe ich den index in eine xml datei und wie rufe ich diese auf, so dass das ganze weiterhin funktionier?

Code:
        Vector vLink = new Vector();

        Link mylink2 = new Link();
        mylink2.setUrl("bauteilvearbeitung.html");
        mylink2.setInhalt("Seite 1");
        mylink2.setUeberschrift("Bauteilverarbeitung");
        vLink.add(mylink2);
        
        Link mylink3 = new Link();
        mylink3.setUrl("einstellung.html");
        mylink3.setInhalt("Seite 2");
        mylink3.setUeberschrift("Menü Einstellung");
        vLink.add(mylink3);
        .
        .
        .

danke schon mal im voraus!
 

licht400

Bekanntes Mitglied
Versteht keiner was ich will ?? :(

wäre lieb, dass mir einer tip gibt, wie ich die xml struktur da anlege und darauf zugreife!
 

licht400

Bekanntes Mitglied
so sieht die xml aus!
kann mir keiner helfen, wie ich diese einlese ??
Code:
<?xml version="1.0" encoding="iso-8859-1"?>
<vector>
	<link id="1" url="einfuhrung.html">
		<ueberschrift>Einführung</ueberschrift>
		<inhalt>Programmsystem , Simulation, Quellcode</inhalt>
	</link>
	<link id="2" url="bauteilverbeitung.html">
		<ueberschrift>Bauteilverarbeitung</ueberschrift>
		<inhalt>Seite 1</inhalt>
	</link>
	<link id="3" url="einstellung.html">
		<ueberschrift>Menue Einstellung</ueberschrift>
		<inhalt>Seite 2</inhalt>
	</link>
	<link id="4" url="ergebnissdarstellung.htm">
		<ueberschrift>Menü Ergebnissdarstellung</ueberschrift>
		<inhalt>Seite 3</inhalt>
	</link>
	<link id="5" url="install_java_3d.html">
		<ueberschrift>Installation Java 3D</ueberschrift>
		<inhalt>Seite 4</inhalt>
	</link>
	<link id="6" url="installation_java.html">
		<ueberschrift>Installation Java</ueberschrift>
		<inhalt>kasus</inhalt>
	</link>
	<link id="7" url="vorraussetzung.html">
		<ueberschrift>Vorraussetzungen</ueberschrift>
		<inhalt>Seite 5</inhalt>
	</link>
</vector>
 

licht400

Bekanntes Mitglied
kann ich die xml datei überhaupt in meine Link classe einlesen, so dass es aussieht, wie als wäre es im prgramm?

so sah es im prgramm aus:
Code:
Vector vLink = new Vector();

        Link mylink2 = new Link();
        mylink2.setUrl("bauteilvearbeitung.html");
        mylink2.setInhalt("Seite 1");
        mylink2.setUeberschrift("Bauteilverarbeitung");
        vLink.add(mylink2);
       
        Link mylink3 = new Link();
        mylink3.setUrl("einstellung.html");
        mylink3.setInhalt("Seite 2");
        mylink3.setUeberschrift("Menü Einstellung");
        vLink.add(mylink3);

und die XML ist drüber.

und diese würde ich gerne einlesen, so das meine Link klasse wieder gefüllt wird.
 

André Uhres

Top Contributor
Code:
       File file = new File("c:/xmlTest.xml");
        Vector<Link> vLink = new Vector<Link>();
        try {
            DocumentBuilder builder =
                    DocumentBuilderFactory.newInstance().newDocumentBuilder();
            Document doc = builder.parse(file);
            NodeList links = doc.getElementsByTagName("link");
            for (int i = 0; i < links.getLength(); i++) {
                Link mylink2 = new Link();
                Element linkElement = (Element)links.item(i);
                String id = linkElement.getAttribute("id");
                String url = linkElement.getAttribute("url");
                mylink2.setId(id);
                mylink2.setUrl(url);
                NodeList ueberschrift = linkElement.getElementsByTagName("ueberschrift");
                Element ueberschriftElement = (Element) ueberschrift.item(0);
                String title = getCharacterDataFromElement(ueberschriftElement);
                mylink2.setUeberschrift(title);
                NodeList inhalt = linkElement.getElementsByTagName("inhalt");
                Element inhaltElement = (Element) inhalt.item(0);
                String text = getCharacterDataFromElement(inhaltElement);
                mylink2.setInhalt(text);
                vLink.add(mylink2);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
 

licht400

Bekanntes Mitglied
danke!

Kannst du mir mal sagen, welche imports ich da benötige, da er mir einige Feher bringt.

danke!

edit:

was bedeuetet wenn der mir anzeigt bei string id


"cannot find symbol"
"symbol: method getAttribute(java.lang.String)"
"location: interface org.dom4j.Element"

irgendwas ist da durcheinander. aber was muss ich da wie ändern?
 

licht400

Bekanntes Mitglied
danke kannst mir aber zu dem fehler den ich im edit geschrieben habe, was sagen!

kommen dadie import durcheinander oder in konflikt und wie ich die probleme behebe?


edit :


und er sagt mir, dass ich getCharacterDataFromElement , davon eine methode schreiben soll, da es diese noich nicht gibt!

aber diese hast du ja auch nicht geschrieben und nur aufgerufen!
 

André Uhres

Top Contributor
licht400 hat gesagt.:
danke kannst mir aber zu dem fehler den ich im edit geschrieben habe, was sagen!
kommen dadie import durcheinander oder in konflikt und wie ich die probleme behebe?
Der Fehler bedeutet, daß ein import fehlt. Mit den imports, die ich dir angegeben haben müsste es funktionieren.
 

licht400

Bekanntes Mitglied
mhh nagut, ich glaube es liegt darin,dass mein jtree menu was ich gemacht habe, auf SAX läuft oder?
doof..ja mit deinen imports klappt es, nur dann nicht mit dem code, den ich für dass jtree menu habe :/

(aber denoch zu deinem code, sagt er mir(auch mit deinen imports), dass getCharacterDataFromElement selber schreiben muss)

jtree code

Code:
 SAXReader reader = new SAXReader();
        Document doc = reader.read("menu.xml");
        Element used = doc.getRootElement();
        DefaultMutableTreeNode intro = new DefaultMutableTreeNode(used.getName());
        appendChilds(used, intro);
        tree = new JTree(intro);

Code:
public static void appendChilds(Element used, DefaultMutableTreeNode intro) {
        List childs = used.elements();
        
        for (int i=0; i<childs.size(); i++) {
            Element e = (Element) childs.get(i);
            DefaultMutableTreeNode install = new DefaultMutableTreeNode(e.getName());
            intro.add(install);
            appendChilds(e, install);
        }
    }
 

André Uhres

Top Contributor
licht400 hat gesagt.:
..aber denoch zu deinem code, sagt er mir(auch mit deinen imports), dass getCharacterDataFromElement selber schreiben muss..
Ja, sorry, das hatte ich ganz übersehen:
Code:
   public static String getCharacterDataFromElement(Element e) {
        Node child = e.getFirstChild();
        if (child instanceof CharacterData) {
            CharacterData cd = (CharacterData) child;
            return cd.getData();
        }
        return "?";
    }
Steht aber auch schon im HAMLET Beispiel oben.
 

licht400

Bekanntes Mitglied
stimmt habe ich grad nochmal durchgeschaut!danke!

ist es eigentlich gut wenn ich mein jtree mit dem SaxReader auslese, da wenn ich die imports hinzufüge, die es benötigt

import org.dom4j.io.SAXReader;

kommt dann bei

Document doc = reader.read("menu.xml");

"incompatible types
"found org.dom4j.Document
"required org.w3c.dom.Document

obwohl ich die imports drin habe!merkwürdig!

nagut, ich teste mal weiter und danke für dein HILFE!
 

André Uhres

Top Contributor
Wenn es zwischen zwei packages Überschneidungen gibt (gleiche Klassennamen in verschiedenen packages), dann musst du die betroffenen Klassen explizit importieren (also den vollständigen Pfad zur Klasse angeben, ohne *).
 

licht400

Bekanntes Mitglied
jep das habe ich getan!
jetz sagt er mir hier.

Code:
public static void appendChilds(Element used, DefaultMutableTreeNode intro) {
        List childs = used.elements(); <-------------------------hier1
        
        for (int i=0; i<childs.size(); i++) {
            Element e = (Element) childs.get(i);
            DefaultMutableTreeNode install = new DefaultMutableTreeNode(e.getName());<-------------------hier2
            intro.add(install);
            appendChilds(e, install);
        }
    }

hier1:"symbol: methode elements()
" location: interface org.w3c.dom.Element

hier2: "symbol: methode getName()
"location: interface org.w3c.dom.Element

das ist das einzigste was ich jetz nich weg bekomme mehr!
 

André Uhres

Top Contributor
Ersetz in dieser Methode "Element" durch sowas:"meinpackagename.Element",
das heisst, du gibst den vollständigen Klassennamen samt Package an.
 

licht400

Bekanntes Mitglied
wenn ich ds richtig verstanden habe, habe ich das jetze so gemacht!

alte zeile:
public static void appendChilds(Element used, DefaultMutableTreeNode intro)

neue Zeile:
public static void appendChilds(org.w3c.dom.Element used, DefaultMutableTreeNode intro)

aber immer noch die 2 fehler wie oben beschrieben!
 

André Uhres

Top Contributor
Und du bist sicher, daß "org.w3c.dom.Element" das richtige package angibt?
Oder hast du vielleicht eine eigene Klasse, die auch Element heisst?
 

licht400

Bekanntes Mitglied
ja bin mir sicher.
jetz habe ich es soweit!
nur noch der fehler bei e.getName()

"symbol : method getName()
"location: interface org.w3c.dom.Element
DefaultMutableTreeNode install = new
DefaultMutableTreeNode(e.getName());



Code:
public static void appendChilds(org.dom4j.Element used, javax.swing.tree.DefaultMutableTreeNode intro) {
        List childs = used.elements();
        
        for (int i=0; i<childs.size(); i++) {
            Element e = (Element) childs.get(i);
            DefaultMutableTreeNode install = new DefaultMutableTreeNode(e.getName());
            intro.add(install);
            appendChilds((org.dom4j.Element) e, (javax.swing.tree.DefaultMutableTreeNode) install);
        }
    }
 

André Uhres

Top Contributor
Sowohl "org.w3c.dom.Element" als auch "org.dom4j.Element" sind durch die imports zugänglich gemacht worden. Daher muss man angeben, welche der beiden Element-Klassen gemeint ist.
 

licht400

Bekanntes Mitglied
achso, danke :)

ach, nur so nebenbei!

wenn ich rausfinden will, dass Link leer ist einfach
if (Links != 0){

}

else System.out.println("Nicht vorhanden");

oder?
 

licht400

Bekanntes Mitglied
danke ihr 2!

ja meinte vLink ;-) (in der eile habe ich mich geirrt!)

mal eine frage noch .


meine ausgabe sieht so aus, wenn ich seite 2 gesucht habe!
Ob die Ausgabe schön aussieht ist mir relativ wurst ;), sie funktioniert und ich möchte weiter testen!

Code:
Suchwort   : Seite 3
Url            : ergebnissdarstellung.html
Menupunkt: Menu Ergebnissdarstellung
Index       : Seite 3

kann ich auf die url, ein link setzen, die mich auf die seite führt.

habe das mal nachgelesen und nur für eine html seite, die ich ausgelesen habe, den anker gesetzt(anker in html erstellt und den Listener in Java).


aber wie erstelle ich einen Link bzw. Anker, wenn ich diese url erst aus meiner xml her kenne!?
 

André Uhres

Top Contributor
licht400 hat gesagt.:
..kann ich auf die url, ein link setzen, die mich auf die seite führt..
Einfach Editor/Browser starten und Url übergeben. Etwa so:
Code:
       //String documentEditor = "C:\\Program Files\\Internet Explorer\\iexplore.exe";
        String documentEditor = "explorer";
        try {
            Runtime.getRuntime().exec("\""+documentEditor+"\" \"" +url+"\"");
        } catch (IOException ex) {ex.printStackTrace();
        }
 

licht400

Bekanntes Mitglied
naja ich meinte die url, die ich ausgegeben habe , womit ich einfach im programm bleibe und nicht den ie öffne..

einfach wie ein weiter und zurück..bloß dass ich auf den link drücke und mir die seite im ein und dem selben prgrammfenster bleibt, ohne einen browser!

also das auf seite 3 ein link ist mit ergebnissdarstellung.html!
 

André Uhres

Top Contributor
Code:
package test;
import java.awt.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
public class URL_Demo_1 extends JFrame {
    private String urlString;
    private JEditorPane editorpane;
    public URL_Demo_1() {
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//        urlString = "file:c:/einfuhrung.html";
        urlString = "http://www.das-tierlexikon.de/";
        URL url = null;
        InputStream input = null;
        try{
            url = new URL( urlString );
        }catch(MalformedURLException ex){
            ex.printStackTrace();
        }
        StringBuffer strb = null;
        try{
            try{
                input = url.openStream();
            }catch(UnknownHostException ex){
            }
            if( input != null ){
                int c = input.read();
                strb = new StringBuffer();
                while( c != -1 ){
                    char cc = (char)c;
                    strb.append(cc);
                    c = input.read();
                }
            }
        }catch(IOException ex){
            ex.printStackTrace();
        }
        editorpane = new JEditorPane();
        editorpane.setEditable(false);
        editorpane.setContentType("text/html");
        getContentPane().add(new JScrollPane(editorpane), BorderLayout.CENTER);        
        if( strb != null ){
            editorpane.setText(strb.toString());
        }else{
            editorpane.setText("Connection failed: " +urlString);
         }
        setExtendedState(JFrame.MAXIMIZED_BOTH);
    }
    public static void main(final String args[]) {new URL_Demo_1().setVisible(true);}
}
 

licht400

Bekanntes Mitglied
k das schaue ich mir mal an!

nur mal eine verständnisfrage wieder.

habe ein ziemlich großen code und da wollte ich den etwas entschlacken, in dem ich etwas auslagere.
da habe ich ganz viele buttons und labels etc.
die habe ich button.java genannt!
in der datei auch noch package main;
und da sagt er mir, da er content panel nicht erkennt, obwohl es in main liegt :(..wieso?
z.b.

Code:
public void suchenformular() {
        
        s = new JButton("search");
        s.setBounds(200,50,100,25);
        s.setForeground(Color.BLUE);
        s.setBackground(Color.WHITE);
        s.addActionListener(this);
        this.contentPanel.add(s);
        
        d = new JButton("delete");
        d.setBounds(300,50,100,25);
        d.setForeground(Color.ORANGE);
        d.setBackground(Color.WHITE);
        d.addActionListener(this);
        this.contentPanel.add(d);
 

licht400

Bekanntes Mitglied
sorry! liegen beide im selben verzeichniss!
main.java und button.java


und das contentPanel findet er nicht.
ist ja auch nicht in button.java deklariert, aber in main.
aber wie bekommt er das mit?
oder fehlt da noch was??


button.java
Code:
package main;

public class button {
    
    /** Creates a new instance of button_label */
    public button() {
    }
    
     public void suchenformular() {
        
        s = new JButton("search");
        s.setBounds(200,50,100,25);
        s.setForeground(Color.BLUE);
        s.setBackground(Color.WHITE);
        s.addActionListener(this);
        this.contentPanel.add(s);
        
        d = new JButton("delete");
        d.setBounds(300,50,100,25);
        d.setForeground(Color.ORANGE);
        d.setBackground(Color.WHITE);
        d.addActionListener(this);
        this.contentPanel.add(d);  
}
}
// geht noch viel weiter mit den buttons und labels..nur ein ausschnitt!
 

André Uhres

Top Contributor
Im Konstruktor von button die Referenz auf main mitgeben ( new button(this) ), in einer Instanzvariablen (z.B. mainClass) in button abspeichern und dann darauf zugreifen (mainClass.contentPanel). contentPanel darf aber dann nicht "private" sein in main, sonst musst du auch noch einen Getter machen ( mainClass.getContentPanel() ).
 

licht400

Bekanntes Mitglied
JButton s,d,w,b,c; so hab ich diese in main.java deklariert!
und das new JButton steht ja in der button.java und wie soll ich dem das this da mit gebeN?
und mein contentPanel ist public.

die mainClass versteh ich gerade nicht, wo du die button speicherst!

ist das sozusagen ein neue klasse zum speichern der button?
 

André Uhres

Top Contributor
licht400 hat gesagt.:
JButton s,d,w,b,c; so hab ich diese in main.java deklariert!
und das new JButton steht ja in der button.java und wie soll ich dem das this da mit gebeN?
und mein contentPanel ist public.

die mainClass versteh ich gerade nicht, wo du die button speicherst!

ist das sozusagen ein neue klasse zum speichern der button?
In main erzeugst du button mit new button(this). "mainClass" ist eine Instanzvariable in button:
Code:
private main mainClass;
Konstruktor von button:
Code:
public button(main mainClass){
   this.mainClass = mainClass;
}
 

licht400

Bekanntes Mitglied
und dann erkennt main.java meine button in button.java?
ohne das ich sie miteinander bekannt mache!

reicht wenn sie im gleichen ordner liegen!?
 

André Uhres

Top Contributor
main erzeugt ja button. Mit Hilfe einer Refernz auf button kann man dann auf die JButtons von button zugreifen:
Code:
button bt = new button(this);//bt = Referenz auf button
s = bt.s   //--> Zugriff auf den JButton s in button
 

licht400

Bekanntes Mitglied
danke und warum sagt der mir ständig bei
Code:
public button(sim simClass){
        
        }

""invalid method declaration "
"return type required"

komisch!
 

licht400

Bekanntes Mitglied
danke.
es sieht jetz so aus

button.java

Code:
package sim;

public class button {

   private sim simClass;
   
    public button(sim simClass){
         this.simClass = simClass;    
  }
    
    public void suchenformular() {
       
        
        s = new JButton("search");
        s.setBounds(200,50,100,25);
        s.setForeground(Color.BLUE);
        s.setBackground(Color.WHITE);
        s.addActionListener(this);
        this.contentPanel.add(s);
        
        d = new JButton("delete");
        d.setBounds(300,50,100,25);
        d.setForeground(Color.ORANGE);
        d.setBackground(Color.WHITE);
        d.addActionListener(this);
        this.contentPanel.add(d);
}
}

sim.java

Code:
package sim;
import sim.button;

public sim() throws DocumentException {
       
        button bt = new button(this);
        s = bt.s;
...
}

aber denoch, erkennt er in button.java weder den button s, der ja in main.java definiert ist noch das contentPanel:(!
irgendwas mach ich doch noch falsch :(
 

André Uhres

Top Contributor
André Uhres hat gesagt.:
Im Konstruktor von button die Referenz auf main mitgeben ( new button(this) ), in einer Instanzvariablen (z.B. mainClass) in button abspeichern und dann darauf zugreifen (mainClass.contentPanel). contentPanel darf aber dann nicht "private" sein in main, sonst musst du auch noch einen Getter machen ( mainClass.getContentPanel() ).
also: this.contentPanel --> mainClass.contentPanel
Das Gleiche gilt dann auch für die JButtons (d.h. s=bt.s brauchst du in dem Fall nicht, da die JButtons nicht, wie ich irrtümlich angenommen hatte, nochmal in button definiert sind).
 

licht400

Bekanntes Mitglied
tut mir leid für die späte nachricht hier,

ich versteh was du meinst..aber!

muss ich die JButtons die in der Main schon einmal definiert waren, noch einmal defineren in der neuen button.main?

eigentlich nicht oder?

wenn nicht, dann erkennt er meine Button in der button.main immer noch nicht, auch nach dem ich in

Main.java

Code:
public Main() throws DocumentException {
       
        button bt = new button(this); 
....
gemacht habe!

oder meintest du, dass ich das nicht mehr brauche und dies so machen soll: this.contentPanel --> mainClass.contentPanel ?

wenn ja, wie sieht das in meiner button.java aus und in meiner Main.java?
 

André Uhres

Top Contributor
Du brauchst die JButtons nicht nochmal in button zu definieren.
In button: bei allem, was in mainClass definiert ist, setzt du einfach "mainClass." davor.
In mainClass: da alles in "mainClass" definiert ist, brauchst du dort die "bt"-Referenz auf button nicht unbedingt,
sie stört aber auch nicht unbedingt.
 

licht400

Bekanntes Mitglied
ah k das habe ich verstanden und ist auch logisch!

aber er erkennt mein actionlistener nicht!

also alt: s.addActionListener(this);

neu: mainClass.s.addActionListener(this);

das haut auch nicht hin, muss ich da einen neuen actionlistener in button schreiben?
 

licht400

Bekanntes Mitglied
so, habe den achtionlistener mit im button.java implementiert!

so. jetz möchte ich in main.java suchenformular aufrufen, dass klappt aber nicht!

wollte es so machen.

in main.java

button.suchenformular();
 

licht400

Bekanntes Mitglied
ich komme voran.

habe jetz alles.

jetz habe ich in der main.java eine publuc void actionPerformed


if (evt.getActionCommand().equals("close")){

mach was
}

er reagiert nicht, liegt wohl daran, dass der close button in der button.java ist.

wie mach ich das?

edit:

mit if (evt.getSource() == c){
mach was
}

geht auch nicht!

c ist der button close!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Auslesen der Länge einer XML-Datei in Android Studio XML & JSON 8
P Knoten-Attribute einer xsd-Datei in einem JTree auslesen XML & JSON 18
T Einfach nur die Elemente einer XML Datei auslesen :( XML & JSON 10
C XPath: Alle Kinder in einer Schleife auslesen XML & JSON 2
Nicer Bestimmten Wert aus einer XML Auslesen XML & JSON 34
L JSON auslesen und Labels in GUI verwenden XML & JSON 13
M json page 2 auslesen XML & JSON 1
Kanda Sorata Eingabefelder von Excel Dateien auslesen XML & JSON 1
K XML vernünftig auslesen XML & JSON 9
K XML Datei erstellen und Daten daraus in Java auslesen XML & JSON 6
H SOAPBody auslesen XML & JSON 0
B XML auslesen, benötige Hilfe XML & JSON 13
I Liste in YAML Datei speichern und wieder auslesen XML & JSON 1
W XML einlesen und Attribute auslesen XML & JSON 1
A Leeres Array beim Auslesen von XML-Datei XML & JSON 4
M Json auslesen XML & JSON 7
K XML Auslesen, wie abspeichern? XML & JSON 32
D Attribute aus XML Auslesen XML & JSON 5
W Kindelemente mit JDOM eines bestimmten Attributes auslesen XML & JSON 6
R Apache POI: Gezieltes Auslesen von Zellen XML & JSON 2
S XMl auslesen:@ output ? XML & JSON 1
Z Verschachtelte XML auslesen XML & JSON 3
C JDOM: Value ohne Unterelemente auslesen XML & JSON 1
I XML IDs auslesen, erst X dann Y XML & JSON 2
S XML - rekursives auslesen - Zeilenumbruch als NodeValue? XML & JSON 3
O XML richtig auslesen XML & JSON 7
Kenan89 XML Tag-ID auslesen mit getElementById XML & JSON 2
J Excel zeilenweise auslesen - POI XML & JSON 5
J Excel Zellen auslesen - automatischer Stopp bei leerer Zelle XML & JSON 2
I XPath Namensräume und auslesen einzelner Knoten XML & JSON 3
S SVG auslesen und darstellen XML & JSON 5
G xpath: in Kindelement zwei Attribut-Werte auslesen XML & JSON 2
G xpath: Inhalt eines Kindelements auslesen XML & JSON 2
1 Html tabelle auslesen??? XML & JSON 6
JanUlrich Tabelle auslesen XML & JSON 2
A XSl mit JDom auslesen XML & JSON 1
J Anzahl der Elemente in einem XML-Dokument auslesen XML & JSON 7
K XMl auslesen XML & JSON 19
P Poi /XSSF : Excel-Tabelle auslesen XML & JSON 2
S XSD-Datei zulässige Werte auslesen XML & JSON 3
D rss auslesen XML & JSON 2
S Attribute von Elementen auslesen mit XPath XML & JSON 2
M Große Datei auslesen/in dieser suchen XML & JSON 2
M RSS-Datei auslesen von Yahoo Webservice XML & JSON 4
N Google Wetter XML (nur current_condition) auslesen mit Java XML & JSON 15
J Dateinamen beim Start auslesen XML & JSON 8
eQuest XML Jaxen Attribute auslesen XML & JSON 2
E XML Datei mit DOM auslesen (Text mit Attributen) XML & JSON 2
P jdom XML-Encoding auslesen XML & JSON 12
H XML Attribute auslesen XML & JSON 5
L XML Daten auslesen und in Tabelle (Array) speichern XML & JSON 1
L XML Dokument auslesen funktioniert nicht richtig XML & JSON 2
C Attributwert aus XML auslesen XML & JSON 10
H XML String auslesen XML & JSON 4
E XML Knoten mit rekursiver Methode auslesen XML & JSON 3
S Dom Baum auslesen XML & JSON 12
J Properties auslesen (Jar) XML & JSON 1
S auslesen XML & JSON 9
Z XML auslesen, Elemente daraus entfernen und als neue XML zurückgeben XML & JSON 2
M XMI-Datei auslesen XML & JSON 4
T EXSD auslesen mit XPath und JDOM XML & JSON 8
M XML-Datum als Referenz auf Objekt-Variable auslesen XML & JSON 5
Spot84 xmi auslesen XML & JSON 20
G Welche Klassen zum erzeugen/auslesen eines XML Files verwend XML & JSON 9
G Xml File schematisch auslesen XML & JSON 2
P NullPointerException beim Auslesen XML & JSON 8
N XML-String in MIDP auslesen XML & JSON 3
H mit JDOM Verarbeitungsanweisungen und Kommentare auslesen XML & JSON 2
K XML auslesen (simpel) XML & JSON 10
X XML File auslesen/parsen u. in ne Hashmap speichern XML & JSON 2
HeRaider Definitionen auslesen und Encoding XML & JSON 3
A SVG Datei auslesen und Batik XML & JSON 1
M XML werte auslesen ! XML & JSON 3
M XML File während Applet-Start auslesen? XML & JSON 10
L SAXReader , auslesen bis zum bestimmten knoten! XML & JSON 3
W XML DomDocument als String auslesen XML & JSON 2
T XML mit JDOM auslesen => langsam? XML & JSON 7
N XML Datei auslesen / Validierung XML & JSON 4
G einzelne tags mit jdom auslesen XML & JSON 4
F XML mit JDOM auslesen XML & JSON 2
N bestimmtes Element auslesen - ich verzweifel XML & JSON 3
A XML-File auslesen, alles leer? XML & JSON 2
H Elemente eines Node auslesen XML & JSON 2
H Xpath kindelemente auslesen XML & JSON 2
P [Solved] XSL: Element-Variable auslesen XML & JSON 2
A Internetinhalte auslesen und in einem XML-File speichern XML & JSON 4
M Aus DTD's Klassen auslesen XML & JSON 2
M *.group() in File auslesen XML & JSON 4
R Problem beim Auslesen von Attributen XML & JSON 4
G Aus XML-Datei auslesen und als Java-Dialog ausgeben XML & JSON 3
D Eingehende XML Files Auslesen XML & JSON 3
T Prob: Auslesen XML File mit JDOM XML & JSON 2
W XML-Document auslesen XML & JSON 2
T Mehrere gleichnamige Unterelemente auslesen XML & JSON 2
W Erzeugen einer openapi spec via swagger XML & JSON 1
W Erzeugen einer Handlerklasse zum Abfangen von SOAP-Requests XML & JSON 13
D Innerhalb einer Property auf eine andere verlinken? XML & JSON 3
S Validierung einer XML-Datei - Führende Leerzeichen und Tabs XML & JSON 10
M Layout + Inhalt einer JTable speichern XML & JSON 30
J Welche Gründe führen zu einer endlos tiefen XML? XML & JSON 4

Ähnliche Java Themen

Neue Themen


Oben