Hirdetés
Köszönjük a sok biztatást, támogatást! Utolsó pillanat a féláras hirdetésfeladásra, előfizetésre!
Új hozzászólás Aktív témák
-
PandaMonium
őstag
Csak egy kis mellékes infó, kiegészítés képpen Karma válaszához:
Java-ban sok módon lehet XML-t parse-olni, pontosabban én 3 -at ismerek: DOM, SAX, StAX.
Amit most Te csinálsz az a DOM parse-olás. Én személy szerint a SAX-ot preferálom, pont azért mert akkor nem kell a NodeList-ekkel bajlódni, egyszerűbb lesz az egész folyamat. Ha érdekelne a dolog itt egy egész pofás tutorial, hogy melyiket, hogy kell csinálni: [link] -
Karma
félisten
A naív és kevésbé szép, de legalább ronda (India style) és általános megoldás, ha List<Map<String, String>>-et vagy List<Map<String, Object>>-et gyártasz az adatból.
Dobna rajta, ha definiálnál egy osztályt az elemre, melynek olyan tagváltozói vannak, mint a belső array kulcsai. Így típusbiztos a parser kimenete.
Egyébként olyan plusz előnye is lenne, hogy használhatnál okosabb eszközöket, mint például JAXB-t vagy a Simple-t a feldolgozáshoz ahelyett, hogy lábbal hajtod a DOM parsert.
-
PandaMonium
őstag
JInput -al is lehet megoldható amit szeretnél, de nem vagyok benne biztos. Nézz utána picit.
-
Karma
félisten
De egyébként muszáj Java hozzá? Ilyen alacsonyszintű mókázáshoz jobb a .NET és a WinAPI interface...
Meg ott a Windows+PrintScreen kombó is.
Na de ha az eredeti baklövéstől nem akarsz elválni, nézd meg ezt a kérdést.
-
PandaMonium
őstag
Szia.
- Ahhoz, hogy ilyet tudj csinálni az alap Java nem elég, kell valami API ami natívan kommunikál az OS-el, mert sima Java-ban csak akkor kapsz KeyEvent-et ha focusolva van az ablakod.
- Igen, a Java képes buborék üzenetek dobására, méghozzá úgy, hogy TrayIcon-t csinálsz az alkalmazásodnak és a TrayIcon .displayMessage(...) funkcióját használod. -
Karma
félisten
-
Ez így nem fog működni, mert semmi garancia sincs arra, hogy a két szám nagyjából ugyan ott helyezkedik el, ráadásul arra sem, hogy ugyan olyan színűek a számok. Azt hittem ennél egyszerűbb feladatra gondolsz, pl simán megkeresni egy mintát egy nagyobb képen, de ez így nehéz lesz, és én nem is értek a képelemzéshez
-
modder
aktív tag
Hali,
http://en.wikipedia.org/wiki/Java_API_for_XML_Processing Ez egy jó összefoglalónak tűnik, hogy melyik API mire való. az XMLEventReader azt hiszem StAX specifikus dolog.
A DOM ugye fogja az egész dokumentumot és beparsolja egy DOM fába.
A SAX az egy push parser: ahogy parsolja a dokumentumokat, új tag-eket, és attribútumokat talál, callback metódusokat hívogat, amiket az alkalmazásod implementál, és el tudod dönteni, hogy mit akarsz csinálni az éppen aktuális információval.
A StAX parser hasonló, csak ott az alkalmazás kívülről irányítja a parsolást: lépteti a parsert előre.Nyilván egy szálban tökre mindegy, hogy push vagy pull, szerintem akkor lehet érdekes ez, amikor van egy parsoló szál és egy feldolgozó szál.
A legegyszerűbb a DOM, mert miután a parser készített belőle egy objektum modellt, a tag-ek objektumok hierarchiájaként fog megjelenni, és szépen a saját metódusain keresztül kereshetsz/iterálhatsz benne, meg is változtathatod. Továbbá, ami nagyon hasznos lehet számodra, hogy XPath lekérdezésekkel le tudod kérni csak azokat a node-okat, amikre szükséged van: http://www.ibm.com/developerworks/library/x-domjava/#3
Az, hogy melyiket válaszd eléggé függ attól, hogy mit akarsz elérni:
Ha nem fontos a sebesség: Ha egy asztali alkalmazást csinálsz, semmit nem fogsz profitálni a StAX parserrel a DOM-hoz képest, nem lesz akkora a különbség. Hatalmas RSS-nél mondjuk (hasraütés) pár száz ms-t veszítesz. (DOM)Ha fontos a sebesség: Egy google readerszerű alkalmazást akarsz, ami éjjel nappal olvassa az RSS-t, és mondjuk párhuzamosan amennyit tud. Akkor nem mindegy, hogy a végső reprezentáció és az eredeti XML között fel akarsz-e építeni és tárolni ideiglenesen a memóriában egy DOM fát.
Esetleg fontos a gyors válasz: te real-time akarod beparszolni az RSS-t, és minél gyorsabban pl. betolni adatbázisba a tartalmát vagy más reprezentációban tárolni. (SAX)Streaming: Ez kapcsolódik az előzőhöz: az RSS-t egyből más reprezentációban akarod elmenteni gyorsan, vagy továbbküldeni a hálózaton. (StAX)
Kell-e minden adat: elképzelhető, hogy nem kell az RSS-ből minden adat, csak a link neve például, akkor a többi adat teljesen fölösleges, fölösleges is tárolni őket, a parsolás folyamán csak azokat az adatokat tárolod le, amik szükségesek. (StAX)
Én azt mondom, amíg nem hatalmas mennyiségű RSS feedről, rettentő reszponzív alkalmazásról, streamingről, vagy nagyon kevés memóriáról van szó, addig használj DOM-ot.
-
Karma
félisten
Szerintem egyiket se, inkább a Simple-t.
De legalább egy pull parsert, ha mindenképp kézzel akarod írni. Az adott node kiválasztására meg általánosságban az XPath való - DOM parsolás után legalábbis, mert stream parsolásnál nehezen értelmezhető.
-
Karma
félisten
Válaszolok én is egy kérdéssel, ugyanis egyáltalán nem jött át, hogy a Histogram osztályodnak milyen szerepet szántál. A kódrészlet alapján ez csinálja a számítást, a rajzolást és az ablak feldobását is, ami mindezt megjeleníti? Mert azért ez durván sok felelősség egy osztálynak.
A privát JPanel megoldás egynek elmegy. Egy másik ilyen tákolat meg ha a Histogram lenne a JFrame leszármazott, nem csak egy Object.
A lényeg az, hogy a paint() felüldefiniálást nem úszhatod meg. Máshol hiába próbálsz rajzolni a kódodban, az Swinget nem fogja érdekelni.
-
Karma
félisten
Csinálnod kell egy komponenst, amit a Frame gyerekének adsz, és az végzi a rajzolást. Vagy csinálsz egy BufferedImage-et, arra rajzolod a hisztogramot, és a paint metódusban egyszerűen kirajzolod a tartalmát.
Valamilyen leszármazást kell csinálnod, nem erőszakolhatod meg a rendszert. Ja és a getGraphicsot felejtsd el, az csak painten belül életképes.
-
Osiris
őstag
Nekem erre:
import java.io.Console;
public class consoleClass {
public static void main(String[] args) {
Console console = System.console();
if (console == null) {
System.err.println("sales: unable to obtain console");
return;
}
String username = console.readLine("Enter username: ");
System.out.println(username);
}
}Ezt dobja:
run:
sales: unable to obtain console
BUILD SUCCESSFUL (total time: 0 seconds)Mi lehet a gond, miért nem kéri be a felhasználónevet?
-
Osiris
őstag
Majd kipróbálom linux alol is, de most nincs rá időm sajnos. Az az érzésem, hogy az ősöreg extra csomagban (amit a magyar java tankönyvek használnak pl. konzolról történő adatbevitelre) lehet valami elavulva.
ArchElf:
Csak a vesszősökre. Tudsz valami megoldást?Az extra csomagot Angster Erzsébet készítette a Java 1 és Java 2 című tankönyveihez.
-
amargo
addikt
Szia!
Én sem ismerem a java osztályok nagy részét, mert nem kimondottan java-ban fejlesztek.
"egér pozícióját akarom a status barba updatelni"
Gondolom designer-el raktad fel az objektumokat - vagy nem, nem változtat sokat a lényegen -, lényegiben az objektumok egy form-on - mainPanel - belül helyezkednek el. Azaz van objektum listád.Ebben az esetben a legfapadosabb módszer - ettől még nem feltétlen rossz -, ha a form objektumai között a statusbar-ra hivatkozol egyből és át adod neki egérkoordinátáit formázottan.
Tehát a canvas-nak lesz egy MouseMoved eseménye. Ahol eléred a StatusBar egy elemét, pl.:
private void canvas1MouseMoved(java.awt.event.MouseEvent evt) {
String pos = "x:" + Integer.toString(evt.getX()) + ", y:" + Integer.toString(evt.getY());
this.statusMessageLabel.setText(pos);
} -
amargo
addikt
Több szálon szeretnéd használni? Leginkább az a kérdés. Mert az, hogy egy osztály erőforrásait elérd egy másikból, több lehetőséged is adott hozzá. Hogy a legegyszerűbbet írjam: static, referencia, események.
De a másik kérdésem, hogy miért a Canvas-ból kell a JFrame-t módosítani? Ha onnan tudod megoldani, akkor küldjön ki egy eseményt, amire a JFrame fel van iratkozva. -
Stylie
aktív tag
Pl
import java.awt.event.*; //eseménykezeléshez kell
import javax.swing.*; //gui felépítéshez kell
public class GombTeszt extends JFrame implements ActionListener{ //osztály, mely a JFrameből öröklődik és implementálja az ActionListener interfészt az eseménykezeléshez
JButton gomb = new JButton("Ez itt egy Gomb, amire rákattintva bejön egy ablak!"); // gomb
public GombTeszt(String title){ //konstruktor
setTitle(title); //ablak "címének" beállítása
add(gomb); //gomb hozzáadása az ablak konténeréhez
gomb.addActionListener(this); //gomb eseményfogadásának képességét aktiváljuk :)
pack(); //komponensek elrendezése
show(); //megjelenítés
}
public void actionPerformed(ActionEvent e) { //ActionListener interfész metódusának implementálása
if(e.getSource()==gomb){ //esemény forrásának vizsgálata
JFrame masikablak = new JFrame("Új ablak"); //új ablak
masikablak.pack();
masikablak.show();
}
}
public static void main(String[] args){
GombTeszt ablak = new GombTeszt("GombTeszt");
}
} -
Új hozzászólás Aktív témák
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- HP Zbook Firefly 15 G8 - i7-1165G7/24GB/512GB-/W15"/W10 Pro/ ÁFÁ-s
- Lenovo ThinkPad P16s AMD Gen2 R5 7540U / 32GB RAM / 1TB SSD / FHD Touch ÁFÁ-s
- Samsung Galaxy A52s 5G 128GB 6GB RAM Dual (A528) Mobiltelefon
- Ohh Lenovo ThinkPad P15 G2 Tervező Vágó Laptop -75% 15,6" i5-11500H 32/1TB RTX A2000 4GB /1 Millió/
- Uhh Lenovo ThinkPad P15 G2 Tervező Vágó Laptop -75% 15,6" i5-11500H 16/1TB RTX A2000 4GB /1 Millió/
- Amazon Kindle 10th Generation ébresztős tok
- Apple iPhone 14 Plus 256GB / AKKU 100% / 12 hónap jótállás
- BESZÁMÍTÁS! ASUS C246M i5 9400F 16GB DDR4 250GB SSD 1TB HDD GTX 1660 Super 6GB Zalman N4 Zalman 600W
- AKCIÓ! Asus ROG Flow Z13 +ROG XG RTX 3070- i9 12900H 16GB DDR5 1TB SSD RTX 3050Ti 4GB + RTX 3070 W11
- DELL Precision 5540 Workstation i7-9850H Nvidia Quadro T1000 16GB 512GB 15.6 új akksi 1év garancia
Állásajánlatok
Cég: FOTC
Város: Budapest