Dr.Yevhenius
|
|
« : 29-05-2009 14:41 » |
|
package game;
public class Form extends java.awt.Frame { public Form() { super("title");
setSize(700, 700);
setResizable(false);
{ java.awt.Dimension d = new java.awt.Dimension( (java.awt.Toolkit.getDefaultToolkit()).getScreenSize()); int x = d.width / 2 - (getWidth() / 2); int y = d.height / 2 - (getHeight() / 2); setLocation(x, y); }
addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent e) { System.exit(0); } });
setVisible(true); }
public void paint(java.awt.Graphics g) { g.drawString("Hello", 10, 10); } } Почему не выводит Hello ?
|
|
« Последнее редактирование: 29-05-2009 14:57 от Inkognito »
|
Записан
|
|
|
|
Asver
|
|
« Ответ #1 : 29-05-2009 15:07 » |
|
Попробуй: g.drawString("Hello", 40, 40); Так выводит. Просто координаты 10, 10 попадают на заголовок окна, и текста не видно.
|
|
|
Записан
|
|
|
|
Dr.Yevhenius
|
|
« Ответ #2 : 29-05-2009 15:20 » |
|
Ох, дожился . Так и есть. А можно как-то виделить область без заголовка или узнать высоту заголовка? P.S.: недавно прогу писал, дык там и g.drawLine(100, 100, 200, 200) не работало (при размерах 700х700). Показал бы прогу, да нет уже её ...
|
|
|
Записан
|
|
|
|
Dr.Yevhenius
|
|
« Ответ #3 : 01-06-2009 16:23 » |
|
Ой рано... Следующий код: // Режимы игры public final int CLEAR = 0, DRAW = 1, GAME = 2;
...
@Override public void paint(java.awt.Graphics g) { // 390x320 java.awt.Graphics2D gc = (java.awt.Graphics2D) g; switch(mode) { case CLEAR: setForeground(java.awt.Color.WHITE); gc.fillRect(0, 0, getWidth(), getHeight()); break; case DRAW: setForeground(java.awt.Color.GRAY); for(int x = 50; x <= 440; x += 10) gc.drawLine(x, 50, x, 370); for(int y = 50; y <= 370; y += 10) gc.drawLine(50, y, 440, y); break; case GAME: break; } }
...
public void actionPerformed(java.awt.event.ActionEvent e) { type = LOCAL; // Тип игрі player = RED; // Определяем цвет игрока // Рисуем поле mode = DRAW; // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! form.repaint(); // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! // Запускаем игру mode = GAME; }
Но case DRAW в paint(...) не запускается ни разу (проверял с помощью диалоговых окон). Вопрос: почему?
|
|
|
Записан
|
|
|
|
Asver
|
|
« Ответ #4 : 02-06-2009 08:12 » |
|
Потому что при вызове repaint() перерисовка выполнятся не сразу, а в очередь событий EventQueue добавляется событие для перерисовки окна. И когда это события начинает обрабатываться, вызывая при этом paint( Graphics g), mode уже равна GAME.
|
|
|
Записан
|
|
|
|
Dr.Yevhenius
|
|
« Ответ #5 : 02-06-2009 14:07 » |
|
Вставил mode = GAME в сам paint(), а он все равно не работает, зараза. Еще вопрос. Мне нужно перерисовать все поле как только окно изменит размер. У меня в учебнике написано, что методы public void windowOpened(java.awt.event.WindowEvent e) public void windowClosing(java.awt.event.WindowEvent e) public void windowClosed(java.awt.event.WindowEvent e) public void windowIconified(java.awt.event.WindowEvent e) public void windowDeiconified(java.awt.event.WindowEvent e) public void windowActivated(java.awt.event.WindowEvent e) public void windowDeactivated(java.awt.event.WindowEvent e)
перехватывают это событие, но в комментариях JVM я такого не нашел. И собственно вопрос: каким cобытием (xEvent) и каким методом можно перехватить изменение размеров окна? P.S.: Хочется знать точно.
|
|
« Последнее редактирование: 02-06-2009 14:36 от Inkognito »
|
Записан
|
|
|
|
Dr.Yevhenius
|
|
« Ответ #6 : 02-06-2009 14:22 » |
|
WindowListener: public void windowOpened(java.awt.event.WindowEvent e) Открытие окна public void windowClosing(java.awt.event.WindowEvent e) Закрытие окна public void windowClosed(java.awt.event.WindowEvent e) Окно закрытое public void windowIconified(java.awt.event.WindowEvent e) Свернуто public void windowDeiconified(java.awt.event.WindowEvent e) Развернуто public void windowActivated(java.awt.event.WindowEvent e) Активировано public void windowDeactivated(java.awt.event.WindowEvent e) Деактивировано
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #7 : 02-06-2009 14:38 » |
|
Inkognito, это ты сам с собой ведёшь беседу? Я так понимаю, ответ правильный - реализовать интерфейс слушателя WindowStateListener и прописать экземпляр в слушатели окна.
|
|
« Последнее редактирование: 02-06-2009 14:41 от Вад »
|
Записан
|
|
|
|
Dr.Yevhenius
|
|
« Ответ #8 : 02-06-2009 14:49 » |
|
Нет, WindowStateListener не подходит для перехвата изменения размеров окна - я добавил вывод диалогового окна в тело обработчика, но оно ни разу не вызывается.
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #9 : 02-06-2009 15:09 » |
|
Тут вот гугль подсказывает, что люди перекрывают setBounds у окна, чтобы перехватить изменение размера.
|
|
|
Записан
|
|
|
|
Dr.Yevhenius
|
|
« Ответ #10 : 02-06-2009 15:18 » |
|
Что означает "перекрывают"?
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #11 : 02-06-2009 16:00 » |
|
Наследуют от окна и определяют свою реализацию этого метода (при этом из своей реализации нужно вызывать родительскую)
|
|
|
Записан
|
|
|
|
Asver
|
|
« Ответ #12 : 02-06-2009 19:29 » |
|
addComponentListener( new ComponentAdapter() {
public void componentResized( ComponentEvent e ) { System.out.println( "Width: " + e.getComponent().getWidth() + " Height: " + e.getComponent().getHeight() );
}
} );
|
|
|
Записан
|
|
|
|
Dr.Yevhenius
|
|
« Ответ #13 : 10-06-2009 08:57 » |
|
... Я создал масив цветов: private java.awt.Color [][] points = new java.awt.Color[n][m]; Все значения заполняю null. Как только игрок кликнет на поле, в этот масив в определенную позицию вставляется цвет (java.awt.Color). Потом сравниваю цвета определенной позиции (х, у) и цвет игрока, который сейчас ходит: if (points[x][y] == player) ... но он дает false. Заставил вывести диалоговым сообщением цвета позиции и игрока - показало что они (255,0,0) и (255,0,0), тоесть однаковые. Почему же if дает все вреся false?
|
|
|
Записан
|
|
|
|
Asver
|
|
« Ответ #14 : 10-06-2009 09:18 » |
|
Оператор == сравнивает ссылки на объекты. Он вернет true только если один и тот-же объект. Для сравнения самих объектов в Java надо использовать метод equals(). if (points[x][y].equals( player) )
|
|
|
Записан
|
|
|
|
Dr.Yevhenius
|
|
« Ответ #15 : 10-06-2009 12:37 » |
|
Как можно перехватить нажатие кнопки без Label'а?
|
|
|
Записан
|
|
|
|
Asver
|
|
« Ответ #16 : 10-06-2009 12:53 » |
|
Что значит без Label'a? Чтобы обрабатывать нажатия кнопок для какого то компонента необходимо добавить для него слушателя и чтобы этот компонент был в фокусе. Если ты имеет в виду перехват нажатий не для конкртного JLabel на форме, а для всей формы, то и добавь слушателя на форму, а не на JLabel.
|
|
|
Записан
|
|
|
|
Dr.Yevhenius
|
|
« Ответ #17 : 10-06-2009 13:01 » |
|
Нет, я создаю кнопку без названия и хочу установить для нее обработчик ActionEvent'ов. Что-то типа выбора цветов у MSPaint. Кстати, нет ли уже готового блока цветов, чтобы не создавать самому (это было бы лучше чем кнопки)?
|
|
|
Записан
|
|
|
|
Asver
|
|
« Ответ #18 : 10-06-2009 13:25 » |
|
Про кнопку без названия не понял, как это. Кстати, нет ли уже готового блока цветов, чтобы не создавать самому Может javax.swing.JColorChooser это подойдет?
|
|
|
Записан
|
|
|
|
Dr.Yevhenius
|
|
« Ответ #19 : 10-06-2009 13:30 » |
|
Может javax.swing.JColorChooser это подойдет?
Да Про кнопку без названия не понял, как это.
java.awt.Button b = new java.awt.Button(); // а не java.awt.Batton("Label")
|
|
|
Записан
|
|
|
|
Dr.Yevhenius
|
|
« Ответ #20 : 10-06-2009 13:37 » |
|
А можно как-то эту панель уменьшить - убрать вкладки HSB, RGB, Preview, оставить только Swatches?
|
|
|
Записан
|
|
|
|
Asver
|
|
« Ответ #21 : 10-06-2009 15:37 » |
|
Попробуй так: JColorChooser cc = new JColorChooser( ); AbstractColorChooserPanel panels[] = cc.getChooserPanels();
for( int i = 1; i < panels.length ; i++ ) { cc.removeChooserPanel( panels[i] ); }
cc.setPreviewPanel( new JPanel( ) );
|
|
|
Записан
|
|
|
|
Dr.Yevhenius
|
|
« Ответ #22 : 11-06-2009 14:53 » |
|
Как можно получить выбранный в даный момент цвет? Я попробовал два варианта: ставил на JColorChooser и panels[0] обработку ActionListener, на щелчок мыши методом getColor() забирал цвет. Но это не работает.
|
|
|
Записан
|
|
|
|
Asver
|
|
« Ответ #23 : 11-06-2009 16:02 » |
|
colorChooser.getSelectionModel().addChangeListener( ... );
|
|
|
Записан
|
|
|
|
|