Új hozzászólás Aktív témák
-
robisz
senior tag
Helló!
A primitív típusok MINDIG érték szerint adódnak át (nincs is referenciájuk).
Az befoglaló osztályok (Integer, Long) referencia szerint adódnak át, ezeknek
viszont nem tudod változtatni az értékét
(Erre egyébként nem tudok rájönni mi értelme...)
Ha mindenképp erre van szükséged akkor csinálj egy saját osztályt aminek
egyetlen int adattagja van get és set metódusokkal... -
robisz
senior tag
1. Passz, talán próbáld megnézni, hogy a JAVA_HOME be van-e állítva rendesen.
2. A Java-ban az int 4 byte-on van ábrázolva, teljesen függetlenül attól, hogy hány
jegyű a szám... ezért az teljesen normális, hogy a writeInt() 4 byte-ot ír ki
Ha String-ként akarod kiírni akkor a writeChars() metódust használd...
Egyébként úgy vettem ki abból amit írtál, hogy te egy textfájlt szeretnél írni, nem
pedig binárisat. Ez esetben ne használd a RandomAccesFile osztályt (egyébként
sem ajánlom) hanem inkább próbálkozz ezzel:
PrintWriter out
= new PrintWriter(new BufferedWriter(new FileWriter(''foo.out'')));
A PrintWriter segítségével bármit ki tudsz írni string-ként!
[Szerkesztve] -
robisz
senior tag
válasz Hujikolp #636 üzenetére
Itt semmit nem akar kiírni, ugyanis ez egy feltétel egy if utasításban
Egyébként ez az applet nagyvonalakban a következőt csinálja:
Letölt egy szöveges fájlt egy URL-ről ami ha jól sejtem felhasználóneveket
és jelszavakat tartalmaz (lásd az inFile metódust). A fájlban levő
adatokat eltárolja az inuser tömbben.
Az általad idézet részben történik annak ellenörzése, hogy a felhasználó
jó usernevet és jelszót adott-e meg (benne van e az inuser tömbben).
A páros indexű elemek tartalmazzák a userneveket, a következő páratlan indexű
elem pedig a jelszó.
Ha a felhasználó érvényes adatokat adott meg (azaz ''bejelentkezett'') akkor
benyit egy url-t egy frame-be amit applet paraméterben adtak meg neki.
Kb ennyi -
-
robisz
senior tag
Az AdjustmentEvent getSource() metódusa visszaadja, hogy melyik
scrollbar-on történt az esemény (mondjuk nem teljesen tiszta, hogy mire
használod pontosan a scrollbarokat de az most mellékes )
Ezután tudsz egy elágazást írni, amelyben meghívhatod a megfelelő
textfield requestFocus() metódusát. -
robisz
senior tag
Ha mégis a scrollbar-t erőlteted, akkor valahogy így tudom elképzelni
az eseménykezelődet:
public void adjustmentValueChanged(AdjustmentEvent e)
{
tfSzinpiros.setText(Integer.toString(sbSzinpiros.getValue()));
int piros = sbSzinpiros.getValue();
tfSzinzold.setText(Integer.toString(sbSzinzold.getValue()));
int zold = sbSzinzold.getValue();
tfSzinkek.setText(Integer.toString(sbSzinkek.getValue()));
int kek = sbSzinkek.getValue();
pnSzin.setBackground(new Color(piros, zold, kek));
Object source = e.getSource();
if (source == sbSzinpiros)
tfSzinpiros.requestFocus();
else if (source == sbSzinzold)
tfSzinzold.requestFocus();
else if (source == sbSzinkek)
tfSzinkek.requestFocus();
} -
robisz
senior tag
válasz Felhasznalo9 #694 üzenetére
Hello! A legegyszerűbb ha letöltesz valamilyen J2ME SDK-t, ezek általában
tartalmaznak egy telefonszimulátort.
A Sun-ét itt találod J2ME Wireless Toolkit néven:
[link]
Előtte a standard Java-t is fel kell telepíteni.
Nem 100%, hogy minden futni fog rajta, mert a fejlesztők gyártóspecifikus
package-eket is használhatnak. Ez esetben az adott gyártó J2ME SDK-ját
érdemes beszerezni. Pl. Nokiának, Motorolának tuti van.
[Szerkesztve] -
robisz
senior tag
Helló!
Először érdemes lenne megismerkedned egy ''Hello World'' szintű
Swing programmal: [link]
Ha ez megvan, akkor itt egy kis útmutató:
- Egy saját ''négyszögrajzoló'' Swing komponenst kell készítened.
A legegyszerűbb ha a JPanel osztályból származtatsz, a paintComponent
metódus felüldefiniálásával tudsz rajzolni.
- Az egér kezeléséhez a MouseListener interfészt kell implementálni,
az eseménykezelőt az addMouseListener metódussal tudod hozzáadni
a komponensedhez.
Sok sikert! -
robisz
senior tag
válasz concret_hp #702 üzenetére
Helló! A lényeg, hogy először egy BufferedImage objektumra kell rajzolni
(ezt a paintBuffer metódusba tettem át) és csak a kész képet rajzoljuk
át a komponensre.
import java.awt.*;
import java.awt.event.*;
public class Mozgas extends Frame {
private int poz;
private Image bufferImage;
private Graphics bufferGraphics;
public Mozgas() {
super(''Mozgas'');
setSize(500,500);
setBackground(new Color(192,192,192));
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
public void paint(Graphics g){
if(bufferGraphics==null){
bufferImage = createImage (this.getSize().width, this.getSize().height);
bufferGraphics = bufferImage.getGraphics();
}
bufferGraphics.clearRect(0,0,this.getSize().width, this.getSize().height);
//calls the paintbuffer method with
//the offscreen graphics as a param
paintBuffer(bufferGraphics);
//we finaly paint the offscreen image onto the onscreen image
g.drawImage(bufferImage,0,0,this);
}
public void paintBuffer(Graphics g){
g.setColor(new Color(255,255,0));
g.fillRect(50,50,400,400);
g.setColor(new Color(0,0,255));
g.fillRect(50+poz,50+poz,50,50);
}
public void update(Graphics g) {
paint(g);
}
public void vandorol() {
for (int c = 1; c < 350; c++) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
}
poz++;
repaint();
}
}
public static void main(String[] args) {
Mozgas mw = new Mozgas();
mw.setVisible(true);
mw.vandorol();
}
}
Saját komponenst egyébként a Component vagy a Canvas osztályból szokás
származtatni, de egy ilyen kis példa esetén így is megteszi. -
robisz
senior tag
Innen szedd a ''Java Runtime Environment (JRE) 5.0 Update 9''-et, ez a legújjabb:
[link] -
robisz
senior tag
Próbáld meg a következőt:
- Uninstalláld a java-t
- Törölj ki mindent manuálisan a ''Program Files\Java'' könyvtárból,
ha maradt ott valami.
- Törölj ki minden registry bejegyzést a
''HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft'' alól.
- Reinstall java
Remélem ez segít -
robisz
senior tag
válasz VadTulok #730 üzenetére
Hááát... nagyon úgy tünik, hogy két különböző ClassLoader
is betölti az osztályodat. Ez pedig akkor szokott előfordulni,
ha a Tomcat valamiért két példányban látja... pl. ha benn van
a tomcat lib könyvtárában és a war fájlban is.
Próbálj meg valami hasonló kiíratást a static blokkodban:
static {
System.out.println(Osztalynev.class.getClassLoader());
System.loadLibrary(''mynativefuncs'');
}
Nezd meg mit ir ki az elso es a masodik betolteskor, ebbol talan
lehet kovetkeztetni valamire. -
robisz
senior tag
Helló!
Alap Java-val azt nem tudod szépen megcsinálni, sajnos a text console-hoz
nem készült olyan platformfüggetlen API mint az AWT a gui esetében...
Létezik viszont egy jcurses nevű package, ami kifejezetten ''text gui'' készítésére
alkalmas és többféle platformra is letölthető: [link]
Ezzel meg lehet csinálni... -
-
robisz
senior tag
válasz loszerafin #769 üzenetére
Szia!
A static import viszonylag új dolog a Java-ban az 1.5-től kezdve jött képbe.
A hagyományos import arra jó, hogy a package név kiirása nélkül hivatkozhass
osztályokra. Ha például azt írod, hogy
import java.util.HashMap;
akkor a kódban simán HashMap-ként hivatkozhatsz a java.util.HashMap osztályra.
Az import java.lang.Math.*; értelmetlen, mivel az osztályon belüli dolgokat
nem lehet beimportálni a sima importtal.
A Math osztályra egyébként már eleve hivatkozhatsz rövid névvel, mivel az a java.lang package-ben van. Ez az egyetlen package amit soha nem kell beimportálni, mert mindig alapból be van importálva.
Az ''régi'' import esetén tehát a package név elhagyható, de nem
az osztálynév! Java 1.5 előtt tehát a PI konstansra úgy tudtál hivatkozni, hogy
Math.PI
Itt jön be a statikus import a képbe, mivel pont arra találták ki, hogy statikus
változók használatakor ne kelljen beirni az osztály nevét sem.
Ha tehát azt mondod, hogy
import static java.lang.Math.PI;
akkor attól kezdve sima PI-t irhatsz a kódban.
Az interfészek, osztályok importja között nincs különbség.
[Szerkesztve] -
robisz
senior tag
válasz loszerafin #772 üzenetére
Szia!
Az enum típusra úgy érdemes gondolni mint egy sima osztályra.
Annyi a különbség, hogy ebből az osztályból közvetlenül sosem hozunk
létre példányokat, csak az előre definiált ''konstansokat'' használhatjuk.
A példában tehát létrejön egy Day ''osztály'' és annak a 7 példánya (SUNDAY,
MONDAY, stb...)
Legegyszerűbb formában tehát az enum így nézne ki:
enum Day {
SUNDAY,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY;
}
Mint minden sima osztályban az enum-ban is írhatunk metódusokat, tárolhatunk
egyéb adatokat.
Alapból a toString() metódus a konstans nevével megegyező string-et ad vissza,
tehát a System.out.println(Day.MONDAY) eredménye ''MONDAY''.
A te példádban az enum-ban tárolunk egy dayname string-et is. Itt jön be
a képbe a konstruktor szerepe. Igaz te kivülről sosem hivod közvetlenül a
konstruktor-t, de a SUNDAY(''Sunday'') sor az enumban valójában egy konstruktor
hívást jelent, azaz a ''Sunday'' string eltárolodik a dayname változóba.
A toString metódust is felüldefiniálódik a te példádban, mégpedig úgy, hogy ezt a
dayname String-et adja vissza. Igy a System.out.println(Day.MONDAY) eredménye
''Monday'' lesz ''MONDAY'' helyett.
Azt hogy milyen adatokat tárolsz az enum-ben és milyen konstruktorokat írsz
te döntöd el, csak a konstansok felsorolásánal (SUNDAY, MONDAY stb) a megfelelő
számú és típusú paramétert kell átadni.
[Szerkesztve] -
robisz
senior tag
válasz loszerafin #774 üzenetére
Egyedül az nem világos, hogy ki, mikor hívja meg a Day konstruktort
Ez is benne volt a válaszomban csak talán nem volt elég világos:
A MONDAY(''Monday'') sor az enum kódjában egyenértékű az általad leírt
konstruktorhívással. Olyan mintha statikus változót hoznál létre valahogy így:
Day MONDAY = new Day(''Monday'');
Tehát azzal hogy felsoroltad a 7 napot az enum-ban, egyúttal a konstruktor
is meghívódott mind a 7 alkalommal.
Kivülről nem tudsz új példányokat létrehozni az enum-ból, de nem is nagyon lenne értelme. -
robisz
senior tag
válasz loszerafin #776 üzenetére
Pontosan így van
Az enum egy speciális osztály a Java-ban (ami egyébként a java.lang.Enum
leszármazottja lesz) a benne szereplő ''konstansok'' pedig sima objektumok.
Egyik nagy előnyük, hogy switch-ben is használhatóak. -
robisz
senior tag
válasz loszerafin #778 üzenetére
A SUNDAY, MONDAY stb.. olyanok mintha a Day osztály statikus field-jei lennének,
(a compiler azzá is alakítja őket a háttérben) ÉS egyúttal Day típusú objektumok.
A kettő korántsem zárja ki egymást!
Így már gondolom érthető a
Day day = Day.MONDAY;
írásmód, hiszen a Day osztály statikus field-jére hivatkozol, ami egy Day típusú
objektum. Pontosan ahogy te is leírtad.
Ha akarod írhatod így is:
Day day = MONDAY;
de akkor a statikus importot kell használnod:
import static Day.*;
és ezzel gyönyörűen visszakanyarodtunk a legelső kérdésedhez
[Szerkesztve] -
robisz
senior tag
-
robisz
senior tag
Ízlés kérdése, én nem értek veled egyet
Azért nem olyan bonyolult ez a javac.exe, hogy bárki aki valaha látott már parancssort,
ne tudná használni. Kétségtelen hogy kezdetben lehet vele szívni, de legalább megérted
hogyan működnek a package-ek, a classpath, meg úgy általában a compiler.
Kíváncsi vagyok mit csinál az a kezdő user aki elindít egy Eclipse-t és mondjuk
classpath-t vagy JVM paramétereket kell állítania... azon kívűl, hogy néz nagyokat -
robisz
senior tag
válasz loszerafin #823 üzenetére
false, false
Tipikus autoboxing kérdés, amit így is meg lehet fogalmazni:
while (i<=j && i>=j && i!=j) {
;
}
Hogyan deklaráljuk i-t és j-t hogy a fenti ciklus végtelen legyen?
Új hozzászólás Aktív témák
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- AKCIÓ Új Dobozos Macbook Pro dokkoló új ára 70.000 forint
- ThinkPad Hybrid USB -C USB -A Dock 40AF Új ára 80.000 Forint Ingyen szállítás
- Xiaomi Redmi Note 9s 128/6 GB 34.9E !!!
- Új Hp Pavilion 15-eh Fémházas Szuper Laptop 15,6" -30% AMD Ryzen 7 5700U 8Mag 16/1TB FHD MATT
- ATI RADEON RX 480 -8 gb DDR5 256 bit videokártya