Модераторы: powerOn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Диспетчер компоновки GridBagLayout 
:(
    Опции темы
platonos
Дата 19.9.2017, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 1.1.2017

Репутация: нет
Всего: нет



Пишу игрушку "Puzzle" ...
Для этого мне сначала надо разобраться как
работает GridBagLayout!
Чтобы было с чем "возиться", прошу предоставить
мне код создающий четыре кнопки - две по
горизонтали, две по вертикали - пара под парой.
PM MAIL   Вверх
platonos
Дата 27.9.2017, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 1.1.2017

Репутация: нет
Всего: нет



Извиняюсь за большое кл-во кода, но по другому, думаю ни как:
Код

//puzzle.groovy
package groovy
//import groovy.swing.SwingBuilder
import javax.swing.*
//import java.awt.FlowLayout
import java.util.*
import java.awt.*
//import java.awt.event.*

public class Spisok_2 {def spisok_2 (N) { Spisok m1 = new Spisok(); def   order1 = m1.spisok(N); return order1}}
                       def spisok (N) {Spisok_2 m2 = new Spisok_2();  order1 = m2.spisok_2(N)}

jfrm = new JFrame('N-мерный puzzle')
gbag = new GridBagLayout()
gbc  = new GridBagConstraints()
jfrm.getContentPane().setLayout(gbag)
jfrm.setSize(500, 500)
btnDim  = new Dimension(50, 50)
gbc.weightx = 0.0       
gbc.insets  = new Insets(0, 0, 0, 0)

chisla = [1, 2, 3, 4, 5, 6, 7, 8]

chislo  = new JLabel('Размерность puzzle: ')
message = new JTextField(10)
button1 = new JButton(text: 'Вычислить', actionPerformed: {chisla = spisok(message.text)})
button2 = new JButton(text: 'Очистить',  actionPerformed: {message.setText("")})
chis    = new JLabel(' ')
y = 0
gbc.gridy = (y); gbc.gridx = (0)
gbag.setConstraints(chislo, gbc)
gbc.gridy = (y); gbc.gridx = (1)
gbag.setConstraints(message, gbc)
gbc.gridy = (y); gbc.gridx = (2)
gbag.setConstraints(button1, gbc)
gbc.gridy = (y); gbc.gridx = (3)
gbag.setConstraints(button2, gbc)
gbc.gridy = (1); gbc.gridx = (2)
gbag.setConstraints(chis, gbc)

jfrm.getContentPane().add(chislo)
jfrm.getContentPane().add(message)
jfrm.getContentPane().add(button1)
jfrm.getContentPane().add(button2)
jfrm.getContentPane().add(chis)

i  = 0; dl = Math.round(Math.sqrt(chisla.size()))
for (int Y = 2; Y < dl + 2; Y++) {
  for (int X = 1; X <= dl; X++) {
    if ((Y == dl + 1) & (X == dl)) {continue}    
    jbtnCh  = new JButton("${chisla[i]}")
    jbtnCh.setPreferredSize(btnDim)
    gbc.gridy = (Y); gbc.gridx = (X)
    gbag.setConstraints(jbtnCh, gbc)
    jfrm.getContentPane().add(jbtnCh)
    i++
   }
}
jfrm.setVisible(true)

Код

//Spisok.groovy
package groovy
  public class Spisok {  
    String N
    Integer Q, J, T, S
    List order, order1
  def spisok (N) {
    S = (N as Integer  ) ** 2
    order = [null]; Q = 0;
  while (Q < S) {
     J = 0; T = Math.round(Math.random() * S)
    if (T != 0) {for (i in order) {if (T != i) {++J} }
      if (J == order.size()) {order = order + T}
         }
      order1 = order - null; Q = order1.size()
      }
   return order1
   }
}      

Проблема заключается в следующем - когда chisla = [1, 2, 3, 4, 5, 6, 7, 8] закоментированно
не появляется GUI проги, пишется что  нет свойства для класса, в тоже время происходит
присвоение результата метода spisok  переменной chisla в
Код

button1 = new JButton(text: 'Вычислить', actionPerformed: {chisla = spisok(message.text)})

но  в 
Код

dl = Math.round(Math.sqrt(chisla.size()))

его не "видно" ...
Почему так происходит, и как надо исправить код?
PM MAIL   Вверх
platonos
Дата 4.10.2017, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 1.1.2017

Репутация: нет
Всего: нет



Дополнение - присвоение результата метода spisok  переменной chisla в
Код

button1 = new JButton(text: 'Вычислить', actionPerformed: {chisla = spisok(message.text)})

естественно происходит при не закоментированой строке
Код

chisla = [1, 2, 3, 4, 5, 6, 7, 8]

так как при этом появляется GUI ...

Добавлено @ 17:44
Попробуем по другому:
Код

//puzzle.groovy
package groovy
import groovy.swing.SwingBuilder
import javax.swing.*
import java.awt.FlowLayout
import java.util.*
import java.awt.*
import java.awt.event.*
 
def f = new File("C:\\Groovy\\puzzle\\src\\groovy\\Spisok.groovy")
 
swinger = new SwingBuilder()
gui = swinger.frame(title:'!!!!!!!!', size: [500, 120]) {
  panel(layout: new FlowLayout()) {
    arab = new JLabel('Размерность puzzle:')
      panel().add(arab)
        message = textField(columns: 10)
          button1 = swinger.button(text: 'Вычислить', actionPerformed: {chisla = spisok(message.text)})
          button2 = swinger.button(text: 'Загрузка',  actionPerformed: {f})
          //Как сделать так, чтобы при нажатии button2 загружался файл Spisok.groovy, т.е. появлялось окно ...
    }
}
gui.show()
  def spisok (N) {
    S = (N as Integer  ) ** 2
    order = [null]; Q = 0;
  while (Q < S) {
     J = 0; T = Math.round(Math.random() * S)
    if (T != 0) {for (i in order) {if (T != i) {++J} }
      if (J == order.size()) {order = order + T}
         }
      order1 = order - null; Q = order1.size()
      }
   return order1
   }


Код

//Spisok.groovy
package groovy
import javax.swing.*
import java.util.*
import java.awt.*
 
jfrm = new JFrame('N-мерный puzzle')
gbag = new GridBagLayout()
gbc  = new GridBagConstraints()
jfrm.getContentPane().setLayout(gbag)
jfrm.setSize(500, 500)
btnDim  = new Dimension(50, 50)
gbc.weightx = 0.0       
gbc.insets  = new Insets(0, 0, 0, 0)
chisla = order1
//chisla = [1, 2, 3, 4, 5, 6, 7, 8]
 
i  = 0; dl = Math.round(Math.sqrt(chisla.size()))
for (int Y = 2; Y < dl + 2; Y++) {
  for (int X = 1; X <= dl; X++) {
    if ((Y == dl + 1) & (X == dl)) {continue}    
    jbtnCh  = new JButton("${chisla[i]}")
    jbtnCh.setPreferredSize(btnDim)
    gbc.gridy = (Y); gbc.gridx = (X)
    gbag.setConstraints(jbtnCh, gbc)
    jfrm.getContentPane().add(jbtnCh)
    i++
   }
}
jfrm.setVisible(true)


Это сообщение отредактировал(а) platonos - 4.10.2017, 17:50
PM MAIL   Вверх
platonos
Дата 18.10.2017, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 1.1.2017

Репутация: нет
Всего: нет



Код

//--------------------------------------------------------------------------------------------------------------------
H = "X"                       
N = 5
chisla = spisok(N)
dl = chisla.size()
def naprav () {q = 3; w = 3; [q, w]}
for (int I = 0; I < dl; I++) {
  Y = (int)(I/N); X = I%N  
  jbtnCh = new JButton(text: chisla[I],  actionPerformed: {jbtnCh.setText(H)})
//Как сделать так, чтобы при нажатии на любой кнопке, имено она именовалась "X",
//а не последняя, как происходит сейчас?...
  //jbtnCh = new JButton(text: chisla[I],  actionPerformed: {def (X, Y) = naprav()})
//Как сделать так, чтобы при нажатии на любой кнопке, значения X и Y из JButton(...)
//передавались в gbc.gridy = Y; gbc.gridx = X
  gbc.gridy = Y; gbc.gridx = X 
  jbtnCh.setPreferredSize(btnDim)   
  gbag.setConstraints(jbtnCh, gbc)
  jfrm.getContentPane().add(jbtnCh) 
   }
jfrm.setVisible(true)
//---------------------------------------------------------------------------------------------------------------------

PM MAIL   Вверх
platonos
Дата 11.2.2018, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 1.1.2017

Репутация: нет
Всего: нет



Вот как дела обстоят сейчас:
Код

//puzzle.groovy
package groovy
import groovy.swing.SwingBuilder
import javax.swing.*
import java.awt.FlowLayout
import java.util.*
import java.awt.*
import java.awt.event.*

jfrm = new JFrame('N-размерный puzzle')
gbag = new GridBagLayout()
gbc  = new GridBagConstraints()
gbc.fill = GridBagConstraints.BOTH
jfrm.getContentPane().setLayout(gbag)
jfrm.setSize(550, 550)
btnDim = new Dimension(50, 50)
gbc.weightx = 0.0       
gbc.insets  = new Insets(0, 0, 0, 0)

//N = Math.round(Math.random()*10); if (0 <= N && N <= 2) {N = 4} else {return N}

public class Spisok_2 {def spisok_2(N) {Spisok m1 = new Spisok(); def   order = m1.spisok(N)}}
                       def spisok(N) {m2 = new Spisok_2();  order = m2.spisok_2(N)}
N = 3
chisla = [1, 2, 3, 4, 5, 6, 7, 8]//spisok(N)
Tablica(N)
jfrm.setVisible(true)

def Tablica(N) {for (int I = 0; I < N**2 - 1; I++) {knopka(N, I)}}
def knopka(N, I) {  
  Y = (int)(I/N); X = I%N 
  jbtnCh = new JButton(text: chisla[I], actionPerformed: {e -> e.getSource().setText(null); Poisk(N, I)})    
  gbc.gridy = Y+1; gbc.gridx = X+1  
  jbtnCh.setPreferredSize(btnDim)   
  gbag.setConstraints(jbtnCh, gbc)
  jfrm.getContentPane().add(jbtnCh) 
}
def Poisk(N, I) {    
  if (((F = I-N) >= 0     &&  chisla[F] == null) ||
      ((F = I+1) <  N**2  &&  chisla[F] == null) ||
      ((F = I+N) <  N**2  &&  chisla[F] == null) ||
      ((F = I-1) >= 0     &&  chisla[F] == null))
      {chisla[F] = chisla[I]; knopka(N, F); chisla[I] = null}     


В данный момент мне надо знать что надо поместить вместо setText(null), что-бы кнопка удалялась, и как поместить полученное в ветку then метода def Poisk(N, I) , что-бы удалялась только кнопка соседняя с пустым полем ...
Код

//Spisok.groovy
package groovy
  public class Spisok {
    Integer S, J, T, Q
    List Order
def spisok(N) {
    S = (N as Integer  )**2 - 1
    Order = [0]; Q = 0
  while (Q <= S) {
     J = 0; T = Math.round(Math.random() * S)
    for (i in Order) {if (T != i) {++J}}
      if (J == Order.size()) {Order = Order + T}         
       Q = Order.size()
      }
    Order = Order - 0
   }
}

PM MAIL   Вверх
Google
  Дата 21.2.2018, 06:15 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Groovy & Grails | Следующая тема »


 




[ Время генерации скрипта: 0.0702 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.