Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[JAVA] Swing componenten afdrukken lukt slechts gedeeltelijk

Pagina: 1
Acties:

  • MatthiasDS
  • Registratie: December 2005
  • Laatst online: 13-11 20:37
Ik ben bezig om voor m'n vrouw een simpele Java-toepassing te maken om iets wat ze vaak gebruikt wat eenvoudiger te maken - een kralenbord (als dat de juiste naam is... ).

Nu, hoewel ik een aantal jaar de kost heb verdiend als ontwikkelaar is dat altijd back-end geweest. Mijn kennis van Swing GUI's is zeer beperkt. Niettemin heb ik wel op een paar minuten een GUI in POC-status ineengeflanst. JPanel met GridLayout, een JColorChooser, listeners op de kralen om de kleur te veranderen, en een print-button met een printklasse die ik van het net heb gehaald.

Nu, de GUI zelf doet op zich wat hij moet doen (nog wel wat verfraaiingswerk nodig), het printen lijkt te werken maar hij print enkel de bead linksboven (in de juiste kleur). Ik heb een paar printklassen van het net gehaald, maar ze gaven allemaal hetzelfde. Wat me dus doet vermoeden dat mijn code, en vermoedelijk de manier waarop ik m'n panel met GridLayout opbouw, foutief is. Ik heb echter geen idee wat er fout zit :)

Iemand die er eens naar wil kijken? Code hier:*snip* Kan iemand even...?

Inladen in eclipse (oid) en Starter starten.

[ Voor 6% gewijzigd door RobIII op 08-10-2013 22:05 ]


  • MatthiasDS
  • Registratie: December 2005
  • Laatst online: 13-11 20:37
En voor het gemak ook nog de code van de verschillende klassen hier:

Klasse BeadBit die de kralen op het bord voorstelt:
code:
1
*snip* 33 regels code


Klasse PrintUtilities:
code:
1
*snip* 90 regels code


Klasse Starter (die qua naam vrij slecht gekozen is aangezien dit eigenlijk de volledige GUI voorstelt):
code:
1
*snip* 118 regels code

[ Voor 90% gewijzigd door RobIII op 08-10-2013 22:06 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Gebruik a.u.b. de wijzig-link (rechtsbovenaan je post) als je iets toe te voegen hebt; je topic herhaaldelijk omhoogschoppen is niet nodig en die melding staat er niet voor niets:

Afbeeldingslocatie: http://tweakers.net/ext/f/rViZSDpQ5n2TpYCcyrDz83Jf/full.png


Verder is 't niet de bedoeling hier dat je je code dumpt (zie je topicstart) en dat wij dan wel even voor je gaan zitten debuggen. Je kunt prima relevante(!) code posten, maar de noodzaak om meer dan een handje vol regels code te posten is er zelden tot nooit. Het posten van 33 + 90 + 118 ≈ 250 regels code is dan ook not-done hier. We willen je best helpen, meedenken, in de juiste richting wijzen maar we zijn geen persoonlijke afhaalbalie voor al uw codeprobleempjes die wij wel even tussen-de-soep-en-aardappelen-door voor je fixen ;) Met een beetje eigen inspanning en wat debugwerk (Debuggen: Hoe doe ik dat?) moet je in ieder geval prima in staat zijn de kern van je probleem te pinpointen binnen een aantal regels code; maak dan een simpele testcase om je probleem te reproduceren en om mee te stoeien / aan te sleutelen en de kans is groot dat je, voordat je een topic überhaupt hoeft te openen, je probleem al hebt opgelost :) Zo niet, dan heb je een mooie testcase om hier te presenteren en hoeven wij niet tussen de bomen in het bos door op zoek naar een naald in een hooiberg :P

Neem anders even een kijkje in onze Quickstart als je nog niet helemaal duidelijk is wat we van een topicstart verwachten (en wat niet). Vooral punt 4 t/m 6 schort 't nogal aan.

Tot slot:
Ik heb een paar printklassen van het net gehaald, maar ze gaven allemaal hetzelfde.
Hoewel ik vermoed dat je probleem dan elders zit: we geven hier geen support op code van derden; daarvoor mag je de originele auteur(s) aan de jas trekken. In de Devschuur® hebben we 't over zélf programmeren.

[ Voor 29% gewijzigd door RobIII op 08-10-2013 22:17 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • MatthiasDS
  • Registratie: December 2005
  • Laatst online: 13-11 20:37
Hoe bedoel je, herhaaldelijk omhoogschoppen? De tweede post werd 3 minuten geplaatst na de oorspronkelijke, ik vermoed dat ik weinig andere threads heb voorbijgestoken met die actie. De reden dat ik het in een tweede post plaatste was om de eerste overzichtelijk te houden.

De reden dat ik de 3 klassen postte was ter gemak van de forumleden die op die manier een volledig zicht hebben op wat er gebeurt.
Printing pinpointen door debugging? Naast het feit dat ik door Java software engineer geweest te zijn echt wel perfect weet wat debugging is en hoe ik dat doe, ben ik weinig wijzer geworden door eens lijn per lijn door de code te lopen. Wat dan ook de reden is dat ik de grotere snippets plaatste.

En "support op code van derden"? Met alle respect, maar neem je het hier niet allemaal een beetje te serieus op? Ik heb een kleine hobby-POC in elkaar gezet en raak er niet uit wat het probleem is. Ik heb het probleem duidelijk omschreven, ik heb context geschetst, en ik heb alles aangereikt dat forumleden nodig zouden kunnen hebben. Een controle in de quickstart levert me ook niet meteen zaken op waar ik dan zo tegen zou zondigen.


edit: geen snippets dan maar. Ik zie niet in hoe ik meer dan de paar lijntjes van de main-methode van m'n GUI kan weglaten en nog steeds een goed overzicht geven van wat op welke manier gebeurt. Ik heb namelijk geen idee van waar ergens het probleem kan zitten.


edit2: tja, blijkbaar ook de link naar m'n code gewoon weg? Weet je wat, sluit deze thread dan maar ineens. Als ik geen grote snippets mag posten, noch een link naar m'n code, dan kan ik gewoon geen voldoende materiaal aanbrengen waar men wijzer uit kan worden.

Hartelijk bedankt.

[ Voor 35% gewijzigd door MatthiasDS op 08-10-2013 22:53 ]


  • Caelorum
  • Registratie: April 2005
  • Laatst online: 22:25
MatthiasDS schreef op dinsdag 08 oktober 2013 @ 22:21:
[...]
edit2: tja, blijkbaar ook de link naar m'n code gewoon weg? Weet je wat, sluit deze thread dan maar ineens. Als ik geen grote snippets mag posten, noch een link naar m'n code, dan kan ik gewoon geen voldoende materiaal aanbrengen waar men wijzer uit kan worden.[...]
Ik ben geen Java laat staan Swing persoon, maar je kan toch een kleine testcase maken? Mocht het, het dan ineens wel doen, weet je waar het probleem ligt. Doet het nog steeds niet wat jij wil heb je een kleine testcase om hier neer te zetten. Het probleem hoor je echt wel tot 40 regels code terug te kunnen brengen. De code die jij postte was nogal verbose :)

  • MatthiasDS
  • Registratie: December 2005
  • Laatst online: 13-11 20:37
Hoe schrijf je een testcase voor een printopdracht? :)

De GUI zelf wordt perfect opgebouwd hoe ik het wil, on-screen. Het printen loopt fout. Lijkt me moeilijk in een testcase te vervatten.

Verder zie ik niet tot welke 40 regels ik het probleem dien terug te brengen aangezien ik ook geen enkel idee heb in welke 40 regels het probleem kan zitten. Wat mij betreft kan het overal in de opbouw van de GUI en overal in de printcode zitten. Mocht de GUI on-screen ook maar gedeeltelijk opbouwen kan ik het probleem best reduceren (en zelf oplossen), maar dat is hier niet het geval.

Verwijderd

MatthiasDS schreef op woensdag 09 oktober 2013 @ 07:41:
Hoe schrijf je een testcase voor een printopdracht? :)

De GUI zelf wordt perfect opgebouwd hoe ik het wil, on-screen. Het printen loopt fout. Lijkt me moeilijk in een testcase te vervatten.

Verder zie ik niet tot welke 40 regels ik het probleem dien terug te brengen aangezien ik ook geen enkel idee heb in welke 40 regels het probleem kan zitten. Wat mij betreft kan het overal in de opbouw van de GUI en overal in de printcode zitten. Mocht de GUI on-screen ook maar gedeeltelijk opbouwen kan ik het probleem best reduceren (en zelf oplossen), maar dat is hier niet het geval.
Je zegt net dat je GUI perfect wordt opgebouwd? Dan zit daar het probleem toch niet?
Je moet gewoon systematisch te werk gaan(ja dat kost tijd, maar dat kost forumleden ook tijd).

- Kijk eerst eens of de informatie over de kleuren wel klopt.
- Kijk of de print methode over dezelfde informatie beschikt

Als dit zo is zou je moeten gaan kijken op welke posities hij iets wil tekenen.

Als je hieruit bent denk ik dat je een lap code van 20 regels kunt laten zien waar het probleem zit. We willen hier graag helpen maar je moet er zelf ook moeite insteken om het probleem voor ons duidelijk te omschrijven ipv je project hier te dumpen. ;)

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 22:25
MatthiasDS schreef op woensdag 09 oktober 2013 @ 07:41:
Hoe schrijf je een testcase voor een printopdracht? :) [...]
Ik bedoelde meer haal alle overbodige meuk eruit. Maak eens een GUI met 1 stackpanel en 1 button o.i.d.(wederom geen Swing kenner) en 1 method voor printen. Ik kan mij niet voorstellen dat je niet in 10 regels zo'n gui kan maken en in de overige 30 kan printen (lijkt mij nog veel IMO)
Overigens kan je niet gewoon print() aanroepen op de top container, bijv. de window? Deze pagina suggereert van wel: Printing Support in Swing Components.

[ Voor 10% gewijzigd door Caelorum op 09-10-2013 09:27 ]


  • MatthiasDS
  • Registratie: December 2005
  • Laatst online: 13-11 20:37
Verwijderd schreef op woensdag 09 oktober 2013 @ 08:44:
[...]


Je zegt net dat je GUI perfect wordt opgebouwd? Dan zit daar het probleem toch niet?
On-screen wel, maar printing in Swing is niet gewoon per-pixel printing van hetgeen op het scherm staat.
- Kijk eerst eens of de informatie over de kleuren wel klopt.
Dat is zo. Er wordt steeds slechts 1 en dezelfde kraal afgeprint, deze heeft steeds de juiste kleur.
- Kijk of de print methode over dezelfde informatie beschikt
Dat is het probleem met het debuggen van de printopdracht: valt echt weinig uit op te maken.
We willen hier graag helpen maar je moet er zelf ook moeite insteken om het probleem voor ons duidelijk te omschrijven ipv je project hier te dumpen. ;)
Ik dacht de probleemomschrijving zo uitgebreid mogelijk gemaakt te hebben - ik ben er gewoon zelf niet in geslaagd het te narrowen naar een bepaald stuk code.

Zoals ik al zei: ik ben jaren software engineer geweest, Ik heb jaren dagelijks Java code geschreven en gedebugd. Ik weet hoe ik (back-end) problemen moet pinpointen en het is me zelden gebeurd dat als ik een probleem kan pinpointen, ik het niet zelf kan oplossen.
Dat is ook de reden dat ik weinig specifieke code kon posten: ik kon het probleem niet pinpointen, dus kon ik ook niet narrowen naar kleine snippets.

  • EddoH
  • Registratie: Maart 2009
  • Niet online

EddoH

Backpfeifengesicht

Maak dan eens een voorbeeldje met alleen een JPanel, en een gebkleurd swing object, vervolgens met 1 kraal of whatever je er in kwijt wil, dan met meerdere etc. Dan kom je vanzelf tot een situatie die wel goed werkt , en een situatie die niet goed werkt.

[ Voor 8% gewijzigd door EddoH op 09-10-2013 10:30 ]


  • MatthiasDS
  • Registratie: December 2005
  • Laatst online: 13-11 20:37
[b][message=41011866,noline]
Ik bedoelde meer haal alle overbodige meuk eruit. Maak eens een GUI met 1 stackpanel en 1 button o.i.d.(wederom geen Swing kenner) en 1 method voor printen. Ik kan mij niet voorstellen dat je niet in 10 regels zo'n gui kan maken en in de overige 30 kan printen (lijkt mij nog veel IMO)
De GUI was eigenlijk al vrij bare-bones. Een JPanel met GridLayout erin, daarin de objecten die van kleur veranderen. 1 knop om te printen, en nog een JColorChooser.
Het enige dat ik nog zou kunnen doen is in plaats een gridlayout van 16x16, eentje van 2x2 maken. Denk niet dat dat veel zal veranderen aangezien dat niets structureel wijzigt aan de opbouw, maar goed, dat probeer ik alvast eens vanavond.
Overigens kan je niet gewoon print() aanroepen op de top container, bijv. de window? Deze pagina suggereert van wel: Printing Support in Swing Components.
Valt te proberen. De code die ik nu heb bevat ook alleszins het casten naar G2D en het translaten, maar bevat wel meer.
Bedankt.

  • MatthiasDS
  • Registratie: December 2005
  • Laatst online: 13-11 20:37
... krijg nu wat.
Code zonder aanpassingen ingeladen op andere PC => printing werkt.

Zo is het natuurlijk logisch dat ik het probleem niet kon herleiden naar 1 specifiek gebied. De code werkt wel en probleem ligt aan... bug in Windows+JVM combinatie?
Pagina: 1