Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с окном,панелью,кнопками 
:(
    Опции темы
Likurg
Дата 7.5.2004, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет...Проблема такова:я динамически добавляю на панель новые кнопки.....и увеличиваю размеры окна,но окно увеличивается,а панель остается такой же(может надо задать отдельно размеры и для панели?)просто кнопки уменьшаются в размере и туда всовываются другие(новые кнопки),а свободная часть окна,которая появилась,так как я его увеличил не заполнилась......че делать?
PM MAIL   Вверх
LSD
Дата 7.5.2004, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



А какой Layout у rootFrame? Может его подправить?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Likurg
Дата 7.5.2004, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



У меня JPanel....GridLayout....Я его поправляю...устанавливаю больше строк(кол-во столбцов должно быть неизменно)все устанавливается правильно...только засчет того,что старые кнопки делаются меньше размером,в то место где они стояли раньше помещаются еще и новые кнопки.....,а я хочу чтобы новые кнопки помещались на то место,на которое я увеличиваю окно
PM MAIL   Вверх
AntonSaburov
Дата 7.5.2004, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



Как я понял, сначала меняем layout, потом кнопки добавляются а потом только окно увеличивается.
А перерисовать не пробовал - типа doLayout() или validate() ?

PM MAIL WWW ICQ   Вверх
Likurg
Дата 7.5.2004, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



сначала увел окно,потом меняет layout,потом добавляем кнопки.Перерисовывать не пробовал...пробовал JPanel.updateUI();
PM MAIL   Вверх
sergejzr
Дата 7.5.2004, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Хочу сразу дать совет(Так как в своё время тоже намучился):
Определись, у тебя "диалоговое" или "документное" приложение.
Примеры в виндах:
  • "Диалоговое" - калькулятор
  • "Документное" - блокнот
Собственно советы:
  • Если "диалоговое", то изменять размер окна, а тем более элементов (кнопок) не имеет смысла!
  • Если "документное", при увеличении должен увеличиваться только размер документа.



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
LSD
Дата 7.5.2004, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



По моему проблема в Frame, у него стоит не тот layout. Попробуй panel.setOpaque(true) и panel..setBackground(Color.GREEN) и сразу увидиш размеры панели. Кстати у GridLayout можно одно из измерений (колонки или столбцы) оставить 0 и тогда он будет добовлять их по мере необходимости, а вообще все ячейки у GridLayout одного размера и занимают всю доступную контейнеру площадь.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Likurg
Дата 7.5.2004, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class MyJToggleButton extends JToggleButton {
   public boolean b;

   public MyJToggleButton(String str, boolean b) {
       super(str);
       this.b = b;
   }

   public void setMyBoolean(boolean b) {
       this.b = b;
   }

   public boolean getMyBoolean() {
       return b;
   }

}

public class TheGame extends JFrame {
   public static JPanel panel2 = new JPanel();
   public static JPanel panel = new JPanel();
   public static JFrame frame = new JFrame();

   public static void main(String args[]) {

       JMenuBar jmb = new JMenuBar();
       jmb.setBackground(Color.white);

       JMenu[] menus = {
           new JMenu("File"),
           new JMenu("Help")
       };
       JMenuItem[] items = {
           new JMenuItem("New"),
           new JMenuItem("Next"),
           new JMenuItem("Close"),
           new JMenuItem("Rules"),
           new JMenuItem("About me")
       };

       for (int i = 0; i < 5; i++) {
           if (i < 3) {
               items[i].addActionListener(new MySecondActionListener() {
               });
               items[i].setBackground(Color.white);
               menus[0].add(items[i]);
               if (i < 2)
                   menus[0].addSeparator();
           } else {
               items[i].addActionListener(new MySecondActionListener() {
               });
               items[i].setBackground(Color.white);
               menus[1].add(items[i]);
               if (i < 4)
                   menus[1].addSeparator();
           }
       }

       jmb.add(menus[0]);
       jmb.add(menus[1]);

       frame.setJMenuBar(jmb);

       panel.setLayout(new GridLayout(3, 9));

       for (int i = 1; i < 10; i++) {
           MyJToggleButton mjtb = new MyJToggleButton("" + i, true);
           panel.add(mjtb);
       }


       MyJToggleButton mtjb = new MyJToggleButton("" + 1, true);
       MyJToggleButton mtjb1 = new MyJToggleButton("" + 1, true);
       MyJToggleButton mtjb2 = new MyJToggleButton("" + 1, true);
       MyJToggleButton mtjb3 = new MyJToggleButton("" + 2, true);
       MyJToggleButton mtjb4 = new MyJToggleButton("" + 1, true);
       MyJToggleButton mtjb5 = new MyJToggleButton("" + 3, true);
       MyJToggleButton mtjb6 = new MyJToggleButton("" + 1, true);
       MyJToggleButton mtjb7 = new MyJToggleButton("" + 4, true);
       MyJToggleButton mtjb8 = new MyJToggleButton("" + 1, true);

       MyJToggleButton mtjb9 = new MyJToggleButton("" + 5, true);
       MyJToggleButton mtjb10 = new MyJToggleButton("" + 1, true);
       MyJToggleButton mtjb11 = new MyJToggleButton("" + 6, true);
       MyJToggleButton mtjb12 = new MyJToggleButton("" + 1, true);
       MyJToggleButton mtjb13 = new MyJToggleButton("" + 7, true);
       MyJToggleButton mtjb14 = new MyJToggleButton("" + 1, true);
       MyJToggleButton mtjb15 = new MyJToggleButton("" + 8, true);
       MyJToggleButton mtjb16 = new MyJToggleButton("" + 1, true);
       MyJToggleButton mtjb17 = new MyJToggleButton("" + 9, true);

       panel.add(mtjb);
       panel.add(mtjb1);
       panel.add(mtjb2);
       panel.add(mtjb3);
       panel.add(mtjb4);
       panel.add(mtjb5);
       panel.add(mtjb6);
       panel.add(mtjb7);
       panel.add(mtjb8);
       panel.add(mtjb9);
       panel.add(mtjb10);
       panel.add(mtjb11);
       panel.add(mtjb12);
       panel.add(mtjb13);
       panel.add(mtjb14);
       panel.add(mtjb15);
       panel.add(mtjb16);
       panel.add(mtjb17);


       for (int i = 0; i < 27; i++) {
           ((MyJToggleButton) panel.getComponent(i)).addActionListener(new MyActionListener() {
           });
       }


       frame.getContentPane().add(panel);
       frame.setTitle("Game (c) 2005  Oracle");
       frame.setSize(449, 155);
       frame.setVisible(true);

       frame.addWindowListener(new WindowAdapter() {
           public void windowClosing(WindowEvent we) {
               System.exit(0);
           }
       });
   }
}

class MyActionListener extends AbstractAction {
   volatile static MyJToggleButton[] symbols = new MyJToggleButton[2];
   volatile static int count1 = 0;
   volatile static int count2 = 0;

   public boolean checkX(MyJToggleButton button1, MyJToggleButton button2) {
       boolean checkX = true;
       int first_X = 0, second_X = 0;
       for(int i = 0; i < TheGame.panel.getComponentCount();i++) {
           if(button1.equals((MyJToggleButton)TheGame.panel.getComponent(i))) {
            first_X = i;
           }
           else if(button2.equals((MyJToggleButton)TheGame.panel.getComponent(i))) {
               second_X = i;
           }
       }
        if(first_X < second_X) {
       for(int i = first_X + 1; i < second_X; i++) {
        if(((MyJToggleButton)TheGame.panel.getComponent(i)).getMyBoolean()) {
           checkX = false;
        }
           else {
            checkX = true;
        }
       }
        }
       else {
         for(int i = second_X + 1; i < first_X; i++) {
        if(((MyJToggleButton)TheGame.panel.getComponent(i)).getMyBoolean()) {
           checkX = false;
        }
           else {
            checkX = true;
        }
       }
        }
       return checkX;
   }

   public boolean checkY(MyJToggleButton button1, MyJToggleButton button2) {
      boolean checkY = true;
       int first_Y = 0, second_Y = 0;
       int column1, column2;
      for(int i = 0; i < TheGame.panel.getComponentCount();i++) {
           if(button1.equals((MyJToggleButton)TheGame.panel.getComponent(i))) {
            first_Y = i;
           }
           else if(button2.equals((MyJToggleButton)TheGame.panel.getComponent(i))) {
               second_Y = i;
           }
       }


       column1 = first_Y%9;
       column2 = second_Y%9;


       if(column1 == column2) {
        for(int i = first_Y + 9; i < second_Y; i += 9) {
          if(((MyJToggleButton)TheGame.panel.getComponent(i)).getMyBoolean()) {
              checkY = false;
          }
            else {
              checkY = true;
          }
        }
       }
       else {
           checkY = false;
       }

       return checkY;

   }

   public void actionPerformed(ActionEvent ae) {
       if (symbols[0] == null) {
           symbols[0] = (MyJToggleButton) ae.getSource();
       } else if (!symbols[0].equals((MyJToggleButton) ae.getSource())) {
           symbols[1] = (MyJToggleButton) ae.getSource();
       }
       else {
           symbols[0] = null;
       }

       if (((MyJToggleButton) ae.getSource()).getMyBoolean()) {
           if ((symbols[1] != null) &&
                   ((Integer.parseInt(symbols[0].getActionCommand()) == Integer.parseInt(symbols[1].getActionCommand())) ||
                   ((Integer.parseInt(symbols[0].getActionCommand()) + Integer.parseInt(symbols[1].getActionCommand())) == 10)) &&
                  (checkX(symbols[0], symbols[1]) || checkY(symbols[0], symbols[1]))) {

               symbols[0].setText("");
               symbols[0].setSelected(false);
               symbols[0].setMyBoolean(false);

               symbols[1].setText("");
               symbols[1].setSelected(false);
               symbols[1].setMyBoolean(false);

               symbols[0] = null;
               symbols[1] = null;


           } else if (symbols[1] != null) {
               symbols[0].setSelected(false);
               symbols[1].setSelected(false);
               symbols[0] = null;
               symbols[1] = null;
           }
       } else {
           symbols[0] = null;
           symbols[1] = null;
           symbols[0].setSelected(false);
           symbols[1].setSelected(false);
           ((MyJToggleButton) ae.getSource()).setSelected(false);
       }
   }
}

class MySecondActionListener extends AbstractAction {
   MyActionListener mal = new MyActionListener();
   volatile static int county = 0;

   public void actionPerformed(ActionEvent ae) {
       if (((JMenuItem) ae.getSource()).getText().equals("New")) {
           TheGame.panel.removeAll();
           TheGame.main(null);
       } else if (((JMenuItem) ae.getSource()).getText().equals("Next")) {
            //ВОТ ТУТ ПРОИСХОДИТ ДОБАВЛЕНИЕ НОВЫХ КНОПОК
            for (int i = 0; i < TheGame.panel.getComponentCount(); i++) {
               if (((MyJToggleButton) TheGame.panel.getComponent(i)).getMyBoolean()) {
                   county++;
               }
           }

  TheGame.frame.setSize(449, TheGame.frame.getWidth() + ((county/9) + 1)*10);
           TheGame.panel.setSize(449, TheGame.frame.getWidth() - 5);
         
           if ((county % 9) == 0) {
               ((GridLayout)TheGame.panel.getLayout()).setRows((((GridLayout) TheGame.panel.getLayout()).getRows() + county / 9));
           } else {
              ((GridLayout)TheGame.panel.getLayout()).setRows((((GridLayout) TheGame.panel.getLayout()).getRows() + (county / 9) + 1));
           }

           int ComponentCount = TheGame.panel.getComponentCount();
           for (int i = 0; i < ComponentCount; i++) {
               if (((MyJToggleButton) TheGame.panel.getComponent(i)).getMyBoolean()) {
                   MyJToggleButton mtjb = new MyJToggleButton(((MyJToggleButton) TheGame.panel.getComponent(i)).getActionCommand(), true);
                   mtjb.addActionListener(new MyActionListener() {
                   });
                   TheGame.panel.add(mtjb);
               }
           }
           TheGame.panel.updateUI();


       } else if (((JMenuItem) ae.getSource()).getText().equals("Close")) {
           System.exit(0);
       } else if (((JMenuItem) ae.getSource()).getText().equals("Rules")) {
           JOptionPane.showMessageDialog(new JFrame(), "                              Правила \n" +
                   "Цель игры :  убрать все надписи с кнопок, \n" +
                   "чтобы кнопки стали чистыми, надо бы убрать\n" +
                   "надписи с кнопок, надо выбрать две кнопки,\n" +
                   "цифры которых одинаковые или их сумма 10 ,\n" +
                   "эти же кнопки должны стоять рядом, то есть\n" +
                   "между ними не должно быть кнопок с цифрами\n");
       } else if (((JMenuItem) ae.getSource()).getText().equals("About me")) {
           
       }
   }
}


Это сообщение отредактировал(а) Likurg - 7.5.2004, 17:04
PM MAIL   Вверх
sergejzr
Дата 7.5.2004, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



/OFFTOP Извиняюсь за предыдущий пост был немного не в тему. OFFTOP/

По моему всё потому, что у тебя не обнуляется county.
С layout'om вроде всё ОК. Просто количество расчитывается не правильно.


Цитата
//ВОТ ТУТ ПРОИСХОДИТ ДОБАВЛЕНИЕ НОВЫХ КНОПОК
  county=0;


Так вроде нормально.


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Likurg
Дата 7.5.2004, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



кстати заметил............если после добавления кнопок растянуть окно(не важно насколько,главное растянуть,хоть на 1 пиксель)то все кнопки заполнят все пространство...........а мне надо, чтобы без растягивания............и еще заметил,что после добавления столбиков(кнопок)не 9 а 8 становится...........странно

Это сообщение отредактировал(а) Likurg - 7.5.2004, 17:35
PM MAIL   Вверх
LSD
Дата 7.5.2004, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Ты каким то макаром делаешь так что contentPane растягивается не на все окно, а после изменения размера она восстанавливается, но как такой эффект получился ума не приложу. А
Код
frame.getContentPane().add(panel);
вообше можно убрать эффект не измениться.
Добавлено @ 17:45
Проблема в этих строках.
Код

TheGame.frame.setSize(449, TheGame.frame.getWidth() + ( (county / 9) + 1) * 10);
TheGame.panel.setSize(449, TheGame.frame.getWidth() - 5);


Это сообщение отредактировал(а) LSD - 7.5.2004, 18:12


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
LSD
Дата 7.5.2004, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Вот это помогло, но в чем проблема убей не знаю notify.gif. Если кто поймет напишите.
Код
TheGame.frame.setSize(449, TheGame.frame.getWidth() + ( (county / 9) + 1) * 10);
TheGame.panel.setSize(449, TheGame.frame.getWidth() - 5);
TheGame.frame.show();




--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Likurg
Дата 7.5.2004, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



LSD
Значит, надо убрать со всех кнопок все надписи....Значит в самом начале есть 27 кнопок,если по провалам зачеркнуть ровно столько, сколько это возможно(по их расположению) то при нажатии кнопки Next(File->Next)новые кнопки(на самом деле выпишутся все те,которые остались в игре,то есть те,у которых есть надписи) выпишутся правильно(естественно без кнопок без подписи)а если зачеркнуть не все варианты,то выпишется к примеру с 8 кнопками на строке,а не с 9 как надо................почему так происходит?
PM MAIL   Вверх
LSD
Дата 8.5.2004, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(Likurg @ 7.5.2004, 21:32)
Значит, надо убрать со всех кнопок все надписи....Значит в самом начале есть 27 кнопок,если по провалам зачеркнуть ровно столько, сколько это возможно(по их расположению) то при нажатии кнопки Next(File->Next)новые кнопки(на самом деле выпишутся все те,которые остались в игре,то есть те,у которых есть надписи) выпишутся правильно(естественно без кнопок без подписи)а если зачеркнуть не все варианты,то выпишется к примеру с 8 кнопками на строке,а не с 9 как надо................почему так происходит?

Ничего не понял hehe.gif. Я разбирался только с тем почему panel не растягивается на все окно а кнопки я вообще не трогал. Поясни что не так с кнопками.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Likurg
Дата 8.5.2004, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я вроде протестировал,теперь панель растягивается(спасибо за помощь),но есть другая проблема......нажми сначала самую верхнюю левую кнопку(1) потом среднюю самую левую(тоже 1)(надписи с этих кнопок должны убраться)...потом нажми нажми самую нижнюю правую кнопку(9) и чуть повыше ее(среднюю)(надписи тоже должны убраться)Теперь удали две единицы во втором реду...с них надписи тоже убираются...так вот теперь нажми в File->Next
Вот,выписались новые кнопки(старые так же остались),но теперь в строке по 8 строчек,а надо чтобы всегда было по 9,как это исправить??(К примеру,если в самом начале удалять надписи с кнопок по-другому,другие кнопки то есть,то при нажатии Next выпишется все правильно,в 9 кнопок в строке)почему так происходит?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

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


 




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


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

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