Permalänk
Medlem

Java rutnät

Håller på att bygga ett enkelt "spel" i java och tänkte använda mig av ett rutnät med simpla JButtons som spelplan. Skulle behöva slänga ut mina JButtons i ett x,y coordinatnät på något sätt. Förmodligen kan jag använda en array av knappar och slänga in i en enkel gridlayout och använda lite fulhack men det är liksom inte så smidigt. Har någon några förslag på hur man bygger upp ett x,y - rutnät på ett smidigt sätt vore jag tacksam.

Visa signatur

In murphy we trust, his law never fails.

Permalänk
Medlem

final int ROWS = 8; final int COLS = 8; final int BUTTON_WIDTH = getWidth() / COLS; final int BUTTON_HEIGHT = getHeight() / ROWS; JButton[][] buttons = new JButton[ROWS][COLS]; for( int j=0; j<ROWS; j++ ) { for( int i=0; i<COLS; i++ ) { buttons[j][i] = new JButton(); buttons[j][i].setLocation(i*BUTTON_WIDTH, j*BUTTON_HEIGHT); buttons[j][i].setSize(BUTTON_WIDTH, BUTTON_HEIGHT); getContentPane().add(buttons[j][i]); } }

Har inte programmerat swing java på ett tag så är inte riktigt säker på vad det finns för metoder m.m...
Men nått sånt där borde väll funka?

Permalänk
Medlem

kan funka, får testa när jag är lite mer vaken.

Visa signatur

In murphy we trust, his law never fails.

Permalänk
Medlem
Permalänk
Medlem

Gridlayout ger ett rutnät ja, men jag kan inte orientera mig i både x och y led smidigt då.

Visa signatur

In murphy we trust, his law never fails.

Permalänk
Medlem

Jo det tror jag nog, håll dom i en 2-dimensionell array bara. GridLayouten lär väl använda en liknande teknik som pago visar för att rita ut knapparna.

Med knapparna i en 2d-array får du i alla fall mappningen (x,y) -> knapp, om du vill ha knapp -> (x,y) kan du utöka JButton-klassen med dessa världen och sätta dem när du lägger in knapparna i arrayen.

Visa signatur

flaah!

Permalänk
Medlem

Nu är vi nog något riktigt finurligt på spåren, tackar.

Här ska kodas

*tillägg*
Har testat med gridlayout och två-dim array nu och det verkar funka. Dock syns bara en ruta när jag skapar min spelplan, ända tills jag rör musen över dom, då kommer de andra rutorna fram.
Kan någon hjälpa mig med detta?

Dessutom kan jag inte skirva text på mina knappar, blir bra tre punkter, skit.

Visa signatur

In murphy we trust, his law never fails.

Permalänk
Medlem

#1 Använder du verkligen GridLayout, brukar kunna bli så med BorderLayout? Kanske GridBagLayout skulle fungera bättre?

#2 Knapparna är för små för att din text ska få plats.

Permalänk
Medlem

1: Jag kör GridLayout i spelplanen men har en separat del för enkla styrknappar och där kör jag gridlayout, kanske är det som gör det.
GridBagLayout bara fuckar upp allt, men tack ändå.

2: Ska bara skriva ett X, borde inte ta så mycket plats alltså men det kräver tydligen 45*45 rutor. Jag vill ha mindre rutor så man kanske kan minska texten på nått sätt? Egentligen är jag bara ute efter en markering att en ruta är "upptagen", finns det nått annat, smidigt sätt att slänga in typ en röd plupp eller liknande på en JButton?

Visa signatur

In murphy we trust, his law never fails.

Permalänk
Medlem

Du måste nog ha flera olika paneler för det där.
1 för dina styrknappar, 1 för spelplanen och 1 som dessa 2 paneler ligger i. Den underliggande kan du använda BorderLayout vilket är smidigast, de andra kan du sedan ha GridLayout i eller vilken LayoutManager du föredrar.

Ett alternativ till knapparna är att de byter färg när de är använda/upptagna. Vill du vara lite mer avancerad kan du omdefinera knappen genom att skriva om paint-metoderna för att få helt egna knappar som är helt anpassade till ditt spel.

Permalänk
Medlem

nu vill jag både kunna växla färg på knapparna och ha en markering för upptagen. Kan ju helt enkelt slänga in en enkel bild som icon men det känns onödigt. Kan man använda icon på något annat sätt?

Visa signatur

In murphy we trust, his law never fails.

Permalänk
Medlem

Du kan göra som jag redan skrivit att du skriver över någon av paint-metoderna och byter färg på knapparna den vägen. På så vis kan du även markera knapparna som upptagna. Eller så lägger du in en ikon på de som är upptagna.