A Pindlethon is an event run about once per year in the SPF. The basic idea is that each participant kills Pindleskin two thousand times during the month long event. Each elite unique and set item is considered a qualifier and those numbers are tracked. The participant with the best 5 items wins. Normally the top few players get to take an item or two from those below them, but that was left out of this Pindlethon. That was something I don't mind too much since I found several grailers that I didn't want to lose, and since I'm self found if my some miracle I won I wouldn't be taking items from anyone.
Here's the loot I collected during my runs.
#5
Spirit Ward
Ward
Defense: 446
Chance to Block: 69%
Smite Damage: 11 to 35
Durability: 67 of 100
Required Strength: 185
Required Level: 68
Item Version: 1.10 Expansion
Item Level: 86
Fingerprint: 0xafc33759
+161% Enhanced Defense
+25% Increased Chance of Blocking
All Resistances +37
25% Faster Block Rate
+6 Cold Absorb
5% Chance to cast Level 8 Fade when struck
#4
M'avina's True Sight
Diadem
Defense: 210
Durability: 10 of 20
Required Level: 64
Item Version: 1.10 Expansion
Item Level: 86
Fingerprint: 0x67d2e9e6
+25 to Mana
+150 Defense
Replenish Life +10
30% Increased Attack Speed
#3
M'avina's True Sight
Diadem
Defense: 207
Durability: 19 of 20
Required Level: 64
Item Version: 1.10 Expansion
Item Level: 86
Fingerprint: 0x58423fc5
+25 to Mana
+150 Defense
Replenish Life +10
30% Increased Attack Speed
#2
Griswold's Valor
Corona
Defense: 270
Durability: 37 of 50
Required Strength: 104
Required Level: 69
Item Version: 1.10 Expansion
Item Level: 86
Fingerprint: 0x31e1bfa3
+63% Enhanced Defense
All Resistances +5
26% Better Chance of Getting Magic Items
Requirements -40%
+0 to Cold Absorb (Based on Character Level)
#1
The Cranium Basher
Thunder Maul
Two-Hand Damage: 130 to 624
Required Strength: 253
Required Level: 87
Mace Class - Normal Attack Speed
Indestructible
Item Version: 1.10 Expansion
Item Level: 86
Fingerprint: 0x2062bd2d
+25 to Strength
+236% Enhanced Damage
+20 to Minimum Damage
+20 to Maximum Damage
All Resistances +25
20% Increased Attack Speed
150% Damage to Undead
75% Chance of Crushing Blow
Indestructible
4% Chance to cast Level 1 Amplify Damage on striking
The rest of the finds:
Bloodmoon x2
Bonehew
Boneshade
Cranebeak
Demon Limb x2
Eschuta's Temper
Ethereal Edge
Gimmershred
Hellslayer
IK Stone Crusher
Lightsabre
M'avina's Embrace
Naj's Puzzler
Ondal's Almighty
Ormus' Robes
Rainbow Facet (3/3 lightning)
Trang-Oul's Guise
Wraith Flight
Best runes: Amn - Shael - Hel
It was a fairly bad showing on my part, as I didn't receive a single vote. A lot of that had to do with the fact I ended up with the second least amount of items of anyone who completed their run set. Runs took about forty-five seconds apiece, which is a bit long for such runs but I like to pick up many rare items looking for endgame gear so lots of extra time is taken identifying and selling items. However I did find several items I've never seen before, most notably M'avina's True Sight which gets me one item closer to finishing the set as well as providing solid equipment for my planned bowazons.
Thursday, December 6, 2007
Wednesday, December 5, 2007
Java: DII Character Simulator Update #4
The rest of the groundwork for the application was completed with the addition of listeners to each and every JButton, JComboBox and JCheckBox. The equipment tabs were fairly simply due to how similar they are, the code was written for one and then copied to each other class file with only minor adjustments required. These listeners don't do anything yet as the methods that govern the program aren't written, but that is all that is required code-wise for this section.
As for the final stats tab, more than just listeners were added. Along with finishing up any needed listeners the entire page was reworked, specifically the skill display panel was removed. I decided that it was going to be a duplication of work as that same information would be available in the skill calculator tab, so doing it twice was unnecessary. Also, the layout of the final stats panel was a bit crowded, and this freed up the needed space.
Some functionality was added to the buttons and fields of this tab as well. Specifically:
Stat Points panel
Button panel
Mods of Note panel
Damage/AR panel
In order to track changes to mods, life, mana and resistances a trio of arrays were created that would hold any additions to these values.
static int[] resistance = {0, 0, 0, 0};
static int[] stats = {0, 0, 0, 0, 0, 0};
static int[] modsOfNote = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
These arrays will be present in each equipment class as well as the final stat class. When an action is taken that could possibly add to any of these values, whether it be adding a vitality point to a piece of equipment, the values of these arrays are summed and the result displayed in the appropriate JTextField.
The only fields that aren't attached to any methods or listeners at this time are the Damage/AR and Misc Mods panels. I'm going to wait until the rest of the program is in place before getting these panels working. This means the next step is to finish the Skill Calculator tab by locating the necessary equations for calculating the skill values and implement a way to view skill bonuses in that tab.
As for the final stats tab, more than just listeners were added. Along with finishing up any needed listeners the entire page was reworked, specifically the skill display panel was removed. I decided that it was going to be a duplication of work as that same information would be available in the skill calculator tab, so doing it twice was unnecessary. Also, the layout of the final stats panel was a bit crowded, and this freed up the needed space.
Some functionality was added to the buttons and fields of this tab as well. Specifically:
Stat Points panel
- Plus button has check to ensure points can't be added if no points available
- Minus button has check to ensure points can't be removed if the base value is displayed
- Points to Vitality increase the displayed life value
- Points to Energy increase the displayed mana value
Button panel
- Character name changed depending on which character type selected in the skills tab
- Change in Difficulty Finished JComboBox increases the stat points remaining and resistance values
- Change in character level JComboBox changes remaining stat point value as well as mana/life values
Mods of Note panel
- The Blocking field was moved to this panel from the Damage/AR panel
Damage/AR panel
- Blocking was removed
- Attack rating and Damage fields for Undead and Demon were added
In order to track changes to mods, life, mana and resistances a trio of arrays were created that would hold any additions to these values.
static int[] resistance = {0, 0, 0, 0};
static int[] stats = {0, 0, 0, 0, 0, 0};
static int[] modsOfNote = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
These arrays will be present in each equipment class as well as the final stat class. When an action is taken that could possibly add to any of these values, whether it be adding a vitality point to a piece of equipment, the values of these arrays are summed and the result displayed in the appropriate JTextField.
The only fields that aren't attached to any methods or listeners at this time are the Damage/AR and Misc Mods panels. I'm going to wait until the rest of the program is in place before getting these panels working. This means the next step is to finish the Skill Calculator tab by locating the necessary equations for calculating the skill values and implement a way to view skill bonuses in that tab.
Tuesday, November 27, 2007
Diablo II: Necromancer Summoner Skill Layout
Also known as the Fishymancer, a Necromancer that uses summons to fight is a typical build in Diablo II. There are many variations of such builds; relying on just skeletons, golems or revives. Personally I want as many meat shields as possible for the character, so a combination of all three is used. The skill setup is as follows.
Raise Skeleton - 20
Skeleton Mastery - 20
Raise Skeletal Mage - 20
Corpse Explosion - 20
Summon Resist - 1
Decrepify - 1
Revive - 1
Attract - 1
As well as a single point in all of the prerequisites. I like to provide a breakdown of when each skill point is allocated.
Raise Skeleton - 2
Amplify Damage - 1
Skeleton Mastery - 1
Clay Golem - 1
At level 6 the character will have three skeleton warriors (1 due to starting wand) and a clay golem to deal the necessary damage. This isn't enough to progress quickly, so the character will be engaging in melee combat for the beginning portion of Act I. Monsters are first cursed with Amplify Damage and then engaged in combat.
Raise Skeleton - 7
Golem Mastery - 1
Raise Skeletal Mage - 1
At level twelve the character has four skeleton warriors, one clay golem and a skeleton mage for company, along with the mercenary. The character will still need to engage in melee combat, but the burden of engaging mobs is no longer present.
Raise Skeleton - 9
Skeleton Mastery - 5
At level 18 the character is ready to take on Andariel, with an additional skeleton warrior. The points in Skeleton Mastery will make the summons strong enough to withstand a few hits by Andariel so they don't crumble instantly. Luckily there are always several carver packs right near her, so resummoning any defeated minions is simple.
Raise Skeleton - 12
Weaken - 1
Terror - 1
Summon Resist - 1
Decrepify - 1
At level 24 Decrepify becomes available, which will be used against all act bosses from here to the end of questing. Decrepify, along with a clay golem, will slow the boss down to such a point where they are dealing very little damage to the summons. An extra skeleton warrior is also obtained, giving a total of 9 companions for the character. At this point the character doesn't need to engage in melee combat and can instead sit back cursing monsters and picking up items while the summons do the dirty work. Duriel should be extremely easy to overcome.
Raise Skeleton - 20
Skeletal Mastery - 20
The next objective is to maximize Raise Skeleton to have as many minions as possible. To that end equipment with +summon skills mods are highly sought after. Shopping for wands is advised, as is using the imbune quest reward from Act I on a necromancer head (shield). By the end of the first difficulty level the character has reached level 45 and has at least nine skeleton warriors, one skeletal mage, one clay golem and a mercenary at their disposal.
Bone Armor - 1
Blood Golem - 1
Iron Golem - 1
Revive - 1
Dim Vision - 1
Confuse - 1
Attract - 1
Teeth - 1
Corpse Explosion - 1
Up to level 52 the utility skills are obtained, each will only receive a single point overall and allow plus skill mods on equipment to provide any additional bonuses, except Corpse Explosion of course. However Corpse Explosion will not receive any additional points quite yet. Normally Normal and Nightmare are run at 'players 8', so CE has limited effectiveness due to it's damage not scaling accordingly. Therefore it will only be used as a body disposal skill for reviving monsters.
Raise Skeletal Mage - 20
Next comes mages as minions. They are not anywhere as useful as skeleton warriors due to their lower Hit Points and damage output. However the character can have as many of them as warriors and they can easily act as extra meat shields to keep the monsters off of the player character. Along the way it is suggested (if RWM) to obtain an Insight polearm for the mercenary (Act II Might, NM). Revives are going to be used and they are very mana intensive and require constant recasting, so to avoid stockpiling mana potions the Insight will solve all mana issues immediately. It's only a suggestion however, Insight is not critical to the character's success, but it does make managing 10+ revives much easier.
Corpse Explosion - 20
At level 69 all summon skills are finished and work can now begin on Corpse Explosion, which should take until level 83 to maximize. It is assumed that in Hell the player will lower the settings to 'player 1 or 3', which will make CE an extremely effective mob killer and speed up the character's progress exponentially. Normally when entering Hell the character will have the ability to summon 11-12 warriors/mages, a clay golem and 8-10 revives, along with the always present mercenary. The player character shouldn't be injured very often. The monsters to watch out for are Black Souls (piercing lightning attack) and Slingers (piercing physical attack). Also reviving monsters should have their corpses exploded, otherwise it is very likely monsters will be revived behind the lines right next to the character.
No pieces of equipment are vital to the success of this character. A general rule is that +skill pieces are more desired over resistance providing equipment. With the amount of friendly minions in the game, any elemental attacks will be absorbed by them long before they reach the player character (except Black Soul lightning of course).
Raise Skeleton - 20
Skeleton Mastery - 20
Raise Skeletal Mage - 20
Corpse Explosion - 20
Summon Resist - 1
Decrepify - 1
Revive - 1
Attract - 1
As well as a single point in all of the prerequisites. I like to provide a breakdown of when each skill point is allocated.
Raise Skeleton - 2
Amplify Damage - 1
Skeleton Mastery - 1
Clay Golem - 1
At level 6 the character will have three skeleton warriors (1 due to starting wand) and a clay golem to deal the necessary damage. This isn't enough to progress quickly, so the character will be engaging in melee combat for the beginning portion of Act I. Monsters are first cursed with Amplify Damage and then engaged in combat.
Raise Skeleton - 7
Golem Mastery - 1
Raise Skeletal Mage - 1
At level twelve the character has four skeleton warriors, one clay golem and a skeleton mage for company, along with the mercenary. The character will still need to engage in melee combat, but the burden of engaging mobs is no longer present.
Raise Skeleton - 9
Skeleton Mastery - 5
At level 18 the character is ready to take on Andariel, with an additional skeleton warrior. The points in Skeleton Mastery will make the summons strong enough to withstand a few hits by Andariel so they don't crumble instantly. Luckily there are always several carver packs right near her, so resummoning any defeated minions is simple.
Raise Skeleton - 12
Weaken - 1
Terror - 1
Summon Resist - 1
Decrepify - 1
At level 24 Decrepify becomes available, which will be used against all act bosses from here to the end of questing. Decrepify, along with a clay golem, will slow the boss down to such a point where they are dealing very little damage to the summons. An extra skeleton warrior is also obtained, giving a total of 9 companions for the character. At this point the character doesn't need to engage in melee combat and can instead sit back cursing monsters and picking up items while the summons do the dirty work. Duriel should be extremely easy to overcome.
Raise Skeleton - 20
Skeletal Mastery - 20
The next objective is to maximize Raise Skeleton to have as many minions as possible. To that end equipment with +summon skills mods are highly sought after. Shopping for wands is advised, as is using the imbune quest reward from Act I on a necromancer head (shield). By the end of the first difficulty level the character has reached level 45 and has at least nine skeleton warriors, one skeletal mage, one clay golem and a mercenary at their disposal.
Bone Armor - 1
Blood Golem - 1
Iron Golem - 1
Revive - 1
Dim Vision - 1
Confuse - 1
Attract - 1
Teeth - 1
Corpse Explosion - 1
Up to level 52 the utility skills are obtained, each will only receive a single point overall and allow plus skill mods on equipment to provide any additional bonuses, except Corpse Explosion of course. However Corpse Explosion will not receive any additional points quite yet. Normally Normal and Nightmare are run at 'players 8', so CE has limited effectiveness due to it's damage not scaling accordingly. Therefore it will only be used as a body disposal skill for reviving monsters.
Raise Skeletal Mage - 20
Next comes mages as minions. They are not anywhere as useful as skeleton warriors due to their lower Hit Points and damage output. However the character can have as many of them as warriors and they can easily act as extra meat shields to keep the monsters off of the player character. Along the way it is suggested (if RWM) to obtain an Insight polearm for the mercenary (Act II Might, NM). Revives are going to be used and they are very mana intensive and require constant recasting, so to avoid stockpiling mana potions the Insight will solve all mana issues immediately. It's only a suggestion however, Insight is not critical to the character's success, but it does make managing 10+ revives much easier.
Corpse Explosion - 20
At level 69 all summon skills are finished and work can now begin on Corpse Explosion, which should take until level 83 to maximize. It is assumed that in Hell the player will lower the settings to 'player 1 or 3', which will make CE an extremely effective mob killer and speed up the character's progress exponentially. Normally when entering Hell the character will have the ability to summon 11-12 warriors/mages, a clay golem and 8-10 revives, along with the always present mercenary. The player character shouldn't be injured very often. The monsters to watch out for are Black Souls (piercing lightning attack) and Slingers (piercing physical attack). Also reviving monsters should have their corpses exploded, otherwise it is very likely monsters will be revived behind the lines right next to the character.
No pieces of equipment are vital to the success of this character. A general rule is that +skill pieces are more desired over resistance providing equipment. With the amount of friendly minions in the game, any elemental attacks will be absorbed by them long before they reach the player character (except Black Soul lightning of course).
Monday, November 26, 2007
Diablo II: No Vitality Tournament
The concept of the No Vitality tournament is simple, no stat points are allowed to be placed in vitality at all. This is the only restriction. Equipment and charms that add to life or vitality are fine to be used at any time. For obvious reasons equipment with +life/vitality mods are highly sought after.
Regardless of which character is chosen life will be an issue, so I decided on
a non-melee character to ensure a decent showing in the tournament. The character would be the same as my All Alone character, a summoning Necromancer. That character wasn't anywhere near as boring as I thought it would be, so I wanted to try again and see how far I could go. I expected this character to be a bit easier due to the mercenary being available to get the army started. The main problem was going to be balancing +life and resistance equipment to ensure survivability. I think I did fairly well in that regard.
As it turned out this Fishymancer, named Bob, became my very first Guardian. I won't go into depth on what happened while questing, I did that quite fine in my Guardian thread in the SPF.
I don't play Hardcore outside of the SPF tournaments, so I'm not sure what to do with Bob. Most likely he'll just sit there as a reminder that I can actually solve the game without dying eight thousand times. Some incentive to play smarter is always nice.
Regardless of which character is chosen life will be an issue, so I decided on
a non-melee character to ensure a decent showing in the tournament. The character would be the same as my All Alone character, a summoning Necromancer. That character wasn't anywhere near as boring as I thought it would be, so I wanted to try again and see how far I could go. I expected this character to be a bit easier due to the mercenary being available to get the army started. The main problem was going to be balancing +life and resistance equipment to ensure survivability. I think I did fairly well in that regard.As it turned out this Fishymancer, named Bob, became my very first Guardian. I won't go into depth on what happened while questing, I did that quite fine in my Guardian thread in the SPF.
I don't play Hardcore outside of the SPF tournaments, so I'm not sure what to do with Bob. Most likely he'll just sit there as a reminder that I can actually solve the game without dying eight thousand times. Some incentive to play smarter is always nice.
Wednesday, November 21, 2007
Java: DII Character Simulator Update #3
I started to attach JTextFields, JComboBoxes and so forth between the different tabbedpanels. While doing so it started to get quite confusing as to what variables needed to be modified when a component's value changed. There was quite a bit of references between tabbedpanels and at this point I had to stop. I had plans of separating the Skills panel into seven separate panels, one for each character type. Since I was starting to reference variables from the Skills panel for the Stats panel, that separation had to be done before anything else.
This was not simple by any means. Each character received a variable in the Skills panel that is called when the corresponding value is chosen in the JComboBox for character selection. Originally I wanted to simply have these character panels extend JPanel and create a panel that is automatically added to the main program. As it turned out, an easier way was to pass a panel from Skills to the character sub-panel and allow that panel to be the framework for the character skill display.
After that is was simply a matter of copying the first character panel into 6 more copies and changing a few variable names. Along with this the Save button that was initially used to populate the characterField JTextField in the Stats panel was removed. The logic behind the button was Incorporated into the character panels. This lead to a new problem, a NullPointerException error occurs when the program is launched. NullPointerException occurs for one of a few reasons:
With that out of the way the listeners for all 210 JComboBoxes in Skills had to be created and then linked to associated int arrays to store the selected data. While time consuming, it wasn't extremely difficult to do. In the end I was also able to put in checks to ensure that a
skill wasn't assigned points if it's requirements did not already have points assigned. If that is the case an error message is generated.
This basically finished off the groundwork for the Skills tab. All that is left is to locate the equations that govern each of the 210 skills and create a separate method for each. These equations must be stored somewhere, I'm hoping the good folks at Diabloii.net will be able to point me in the right direction. I'm hoping it is an equation that drives each skill. If not then I'll have to store each skills values in an array of arrays and then create my own equation to generate the necessary information.
Once this is done I'll have a standalone skill calculator ready to go.
This was not simple by any means. Each character received a variable in the Skills panel that is called when the corresponding value is chosen in the JComboBox for character selection. Originally I wanted to simply have these character panels extend JPanel and create a panel that is automatically added to the main program. As it turned out, an easier way was to pass a panel from Skills to the character sub-panel and allow that panel to be the framework for the character skill display.
After that is was simply a matter of copying the first character panel into 6 more copies and changing a few variable names. Along with this the Save button that was initially used to populate the characterField JTextField in the Stats panel was removed. The logic behind the button was Incorporated into the character panels. This lead to a new problem, a NullPointerException error occurs when the program is launched. NullPointerException occurs for one of a few reasons:
- Calling the instance method of a null object
- Accessing or modifying the field of a null object
- Taking the length of null as if it were an array
- Accessing or modifying the slots of null as if it were an array
- Throwing null as if it were a Throwable value
With that out of the way the listeners for all 210 JComboBoxes in Skills had to be created and then linked to associated int arrays to store the selected data. While time consuming, it wasn't extremely difficult to do. In the end I was also able to put in checks to ensure that a
skill wasn't assigned points if it's requirements did not already have points assigned. If that is the case an error message is generated.This basically finished off the groundwork for the Skills tab. All that is left is to locate the equations that govern each of the 210 skills and create a separate method for each. These equations must be stored somewhere, I'm hoping the good folks at Diabloii.net will be able to point me in the right direction. I'm hoping it is an equation that drives each skill. If not then I'll have to store each skills values in an array of arrays and then create my own equation to generate the necessary information.
Once this is done I'll have a standalone skill calculator ready to go.
Tuesday, November 6, 2007
Java: DII Character Simulator Update #2
The third and final piece of the GUI for the character simulator is completed. This won't be the last page to be made, but for the initial application attempt this will suffice. Thanks to the lessons learned making the Equipment tab the format was much easier to setup with the GroupLayout manager.
I took the LCS of the Diablo II program as a template and then added any information I felt was necessary for display purposes. The first few subpanels were fairly basic, the Misc mods, Mods of note and Resistance panels were for pure display purposes. It was the other panels that required extra components.
Originally I was going to create the Stat panel with JTextFields and have the user enter in the amount of points to add to each characteristic, then a "Calculate" button would need to be pressed to add the needed info. This unfortunately didn't take into account removing points as a user played with the virtual character's setup. So instead I followed the setup of the LCS and used buttons, one plus and one minus, for adding/subtracting stat points. GroupLayout was of course utilized to arrange the JLabels and JButtons into an appropriate order.
This was however only part of the subpanel. There was also the display of the sum of remaining stat points that needed to be added. The subpanel was actually governed not by GroupLayout but by BorderLayout with the GroupLayout section in the center and a FlowLayout in the southern portion containing the JLabel/JTextField combination that displays remaining stat points. The same layout setup was used for the Damage subpanel, with its JComboBox for skill selection component taking up the southern portion of the subpanel.
The last subpanel to be added was the Skill Info section. It occurred to me that there is not a place in the Skill Planner tab to view the properties of each of the skills once points have been allocated. I could have placed a JTextArea at the bottom of the page with this information, but I thought that would ruin the layout of each page. So this feature is added to the Stat panel instead, so that damage and effects of each skill may be viewed, taking into account bonuses from the equipment the virtual character is wearing.

This completes the first phase of the application's development. With the GUI completed I can now begin work implementing listeners and functionality to all of the JComboBoxes, JButtons, JCheckBoxes, JTextFields and JTextAreas. There is a limited amount of pieces that can be tied together before data is required, but as much as possible will be implemented.
I took the LCS of the Diablo II program as a template and then added any information I felt was necessary for display purposes. The first few subpanels were fairly basic, the Misc mods, Mods of note and Resistance panels were for pure display purposes. It was the other panels that required extra components.
Originally I was going to create the Stat panel with JTextFields and have the user enter in the amount of points to add to each characteristic, then a "Calculate" button would need to be pressed to add the needed info. This unfortunately didn't take into account removing points as a user played with the virtual character's setup. So instead I followed the setup of the LCS and used buttons, one plus and one minus, for adding/subtracting stat points. GroupLayout was of course utilized to arrange the JLabels and JButtons into an appropriate order.
This was however only part of the subpanel. There was also the display of the sum of remaining stat points that needed to be added. The subpanel was actually governed not by GroupLayout but by BorderLayout with the GroupLayout section in the center and a FlowLayout in the southern portion containing the JLabel/JTextField combination that displays remaining stat points. The same layout setup was used for the Damage subpanel, with its JComboBox for skill selection component taking up the southern portion of the subpanel.
The last subpanel to be added was the Skill Info section. It occurred to me that there is not a place in the Skill Planner tab to view the properties of each of the skills once points have been allocated. I could have placed a JTextArea at the bottom of the page with this information, but I thought that would ruin the layout of each page. So this feature is added to the Stat panel instead, so that damage and effects of each skill may be viewed, taking into account bonuses from the equipment the virtual character is wearing.

This completes the first phase of the application's development. With the GUI completed I can now begin work implementing listeners and functionality to all of the JComboBoxes, JButtons, JCheckBoxes, JTextFields and JTextAreas. There is a limited amount of pieces that can be tied together before data is required, but as much as possible will be implemented.
Friday, November 2, 2007
Java: DII Character Simulator Update #1
Creating the GUI interface for the DII Character Simulator was the next step in this applications development. Unlike in the original draft I decided against using a JComboBox to change between equipment types. Instead I used a nested JTabbedPane for a more professional look.
Of course this became the first obstacle in that I wasn't sure how to nest a JTabbedPane instead of an already existing JTabbedPane. First attempts lead to the tabs showing up, but in a vertical line instead of horizontally, and also leaving quite a bit of wasted white space on the edges. The problem was that the Equipment class was extending a JPanel, so when this was changed to extend a JTabbedPane everything worked out nicely.
Each piece of the GUI was created in its own method and hosted on a separate JPanel, so that they could be organized and formatted independently. As work began a combination of JCheckBoxes (first time this component has ever been used by me), JButtons, JScrollPanes and JLists (also a first) was organized into the needed GUI pieces. The JList component took some research to locate as the component that would do the job I needed. Set to allow only a single selection, this component is the cornerstone to how equipment will be added (and removed) from the virtual character.
Once all of the components were created, the next task was to combine them all into a single JPanel for display purposes. This turned out to be more of a problem than anticipated. Due to the success of the GroupLayout manager with the skill panels I felt this would be the format needed to create the look and feel of the equipment panels. The problem that arose is that I have only 5 components and didn't want to leave any extra white space. The GroupLayout manager kept cutting off part of one of the components, the ItemList Panel, as I was unable to extend this panel vertically. Everything apparently has to remain in their separate rows, no overlap allowed.
Next attempt was a FlowLayout manager, but getting all of the items to line up vertically simply wasn't working. The components would push each other out of the program window. Finally I settled on a compromise. Two panels were created with the GroupLayout manager that each had two components lined up vertically. The third panel, the one containing the ItemList panel was created with FlowLayout manager. Then all three panels were added to the main panel, also using the FlowLayout manager.

I most likely used more panels and layout managers than necessary, however the final result is quite nice and the code isn't too jumbled, so I'm fine with how things worked out. Once the code was finished for the first equipment type, the helm, it could be carbon copied for all of the other equipment items. The only changes came with the weapon panel, where an option to dual wield was added to the ButtonPanel via a JCheckBox and the other change was the jewelry panel, where some of the selection options were removed or renamed such as elite/exceptional/ normal quality options do not apply.
The next step will be to create the final statistic display that will replace the LCS.
Of course this became the first obstacle in that I wasn't sure how to nest a JTabbedPane instead of an already existing JTabbedPane. First attempts lead to the tabs showing up, but in a vertical line instead of horizontally, and also leaving quite a bit of wasted white space on the edges. The problem was that the Equipment class was extending a JPanel, so when this was changed to extend a JTabbedPane everything worked out nicely.
Each piece of the GUI was created in its own method and hosted on a separate JPanel, so that they could be organized and formatted independently. As work began a combination of JCheckBoxes (first time this component has ever been used by me), JButtons, JScrollPanes and JLists (also a first) was organized into the needed GUI pieces. The JList component took some research to locate as the component that would do the job I needed. Set to allow only a single selection, this component is the cornerstone to how equipment will be added (and removed) from the virtual character.
Once all of the components were created, the next task was to combine them all into a single JPanel for display purposes. This turned out to be more of a problem than anticipated. Due to the success of the GroupLayout manager with the skill panels I felt this would be the format needed to create the look and feel of the equipment panels. The problem that arose is that I have only 5 components and didn't want to leave any extra white space. The GroupLayout manager kept cutting off part of one of the components, the ItemList Panel, as I was unable to extend this panel vertically. Everything apparently has to remain in their separate rows, no overlap allowed.
Next attempt was a FlowLayout manager, but getting all of the items to line up vertically simply wasn't working. The components would push each other out of the program window. Finally I settled on a compromise. Two panels were created with the GroupLayout manager that each had two components lined up vertically. The third panel, the one containing the ItemList panel was created with FlowLayout manager. Then all three panels were added to the main panel, also using the FlowLayout manager.

I most likely used more panels and layout managers than necessary, however the final result is quite nice and the code isn't too jumbled, so I'm fine with how things worked out. Once the code was finished for the first equipment type, the helm, it could be carbon copied for all of the other equipment items. The only changes came with the weapon panel, where an option to dual wield was added to the ButtonPanel via a JCheckBox and the other change was the jewelry panel, where some of the selection options were removed or renamed such as elite/exceptional/ normal quality options do not apply.
The next step will be to create the final statistic display that will replace the LCS.
Subscribe to:
Posts (Atom)