Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Общие вопросы > Работа с панелями |
Автор: Shorr Kan 12.1.2004, 07:17 |
1. Создаю две панели. КОгда они в одном файле - все работает. Когда же они в двух разных файлах (каждая - в своем) - по нажатию на кнопку в одной панели - не могу обратиться в другую. Как это сделать? 2. Создал две панельки, а они ровно пополам делят весь фрейм. Как каждой задать определенный размер? |
Автор: SmaLL 12.1.2004, 09:00 |
Почитай про LayoutManager's http://java.sun.com/docs/books/tutorial/index.html А лучше выкачай весь тутор. |
Автор: AntonSaburov 12.1.2004, 10:37 |
Shorr Kan Модератор: Делаю замечание - один вопрос, один топик. Это правило не из вредности, а для удобства. Сам догадайся, на какой вопрос тебе ответили 1. Без кода помочь невозможно. 2. Почитать про LayoutManager, что посоветовал SmaLL или создать свои панельки (новые классы) и переопределить в них getPreferredSize() и getMinimumSize() |
Автор: Shorr Kan 13.1.2004, 06:57 |
Хорошо, в следующий раз буду по одному вопросу задавать. Сейчас продолжаю первый, так как второй ясено и закрыт. Спасибо. 1. JBuilder создает проект из двух файлов. Первый посылать не буду - он, полагаю, для всех понятен. Там я ничего не трогал. Во втором файле я просто поставил ссылки на два моих дополнительных класса. Вот текст этого, второго, файла: import java.awt.*; import java.awt.event.*; import javax.swing.*; public class panelapp extends JFrame { JPanel contentPane; BorderLayout borderLayout1 = new BorderLayout(); JPanel panel_1; JPanel panel_2; //Construct the frame public panelapp() { enableEvents(AWTEvent.WINDOW_EVENT_MASK); try { jbInit(); } catch(Exception e) { e.printStackTrace(); } } //Component initialization private void jbInit() throws Exception { contentPane = (JPanel) this.getContentPane(); contentPane.setLayout(new GridLayout(1, 2)); this.setBounds(100,100,400,300); this.setTitle("panelapp"); panel_1 = new panel1(); panel_2 = new panel2(); contentPane.add(panel_1); contentPane.add(panel_2); } //Overridden so we can exit when window is closed protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { System.exit(0); } } } Теперь текст файла panel1: import java.awt.*; import java.awt.event.*; import javax.swing.*; public class panel1 extends JPanel { public panel1() { this.setBackground(Color.yellow); } } И файл panel2: import java.awt.*; import java.awt.event.*; import javax.swing.*; public class panel2 extends JPanel { Button but_1; Button but_2; public panel2() { this.setBackground(Color.red); but_1= new Button("123"); add(but_1); but_2= new Button("456"); add(but_2); } public boolean action(Event evt, Object obj) { if(evt.target instanceof Button) { if(evt.target.equals(but_1)) { this.setBackground(Color.red); } if(evt.target.equals(but_2)) { this.setBackground(Color.yellow); } } return false; } } Когда это было в одном файле - все работало прекрасно. Сейчас, конечно, нет. Понятно, почему - глобальных переменных не существует в этом языке. Но как это исправить? |
Автор: AntonSaburov 13.1.2004, 11:35 | ||
Скопировал все три класса по разным файлам в одну директорию и запустил следующее:
Все прекрасно собралось. Правда main нет и посему не запустить. Но все нормально собирается. |
Автор: Shorr Kan 14.1.2004, 06:04 |
Файл, содержащий main таков: import javax.swing.UIManager; public class twopanel { boolean packFrame = false; //Construct the application public twopanel() { panelapp frame = new panelapp(); //Validate frames that have preset sizes //Pack frames that have useful preferred size info, e.g. from their layout if (packFrame) { frame.pack(); } else { frame.validate(); } frame.setVisible(true); } //Main method public static void main(String[] args) { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch(Exception e) { e.printStackTrace(); } new twopanel(); } } Но вопрос не в этом. Да, он собирается, но не работают кнопки. Кнопка, находящаяся в одной панели, не воздействует на другую панель. Я так понимаю, что проблема в области видимости. Когда все в одном файле - все понятно и работает. Когда же в разных - перестает работать. Как можно решить эту проблему? |
Автор: AntonSaburov 14.1.2004, 12:36 | ||
Так тогда просто ничего не собралось бы. Я поиграл - цвет меняется. То все желтенькое, то половина красненькая. Все нормально. |
Автор: Shorr Kan 15.1.2004, 06:51 |
Да? А у меня не работает. Может это быть из-за того, что у меня используется jdk1.2.2 ? |
Автор: Shorr Kan 15.1.2004, 07:03 |
А сейчас у меня вот что происходит: C:\JBuilder35\jdk1.2.2\bin>javac *.java Note: panel2.java uses or overrides a deprecated API. Recompile with "-deprecat ion" for details. 1 warning |
Автор: AntonSaburov 15.1.2004, 10:40 | ||
Во-первых, надо запустить javac с флагом -deprecation javac -deprecation *.java и посмотреть что именно не так. А во-вторых, у меня под 1.4.2_03 (самая распоследняя версия - требуют от нас знаете ли) никаких подобных сообщений нет. |
Автор: Shorr Kan 16.1.2004, 07:04 |
Я удалил всю возможную яву, даже все IDE... ПОставил SE 1.4.2_03. Но там нет файла javac.exe Как быть? |
Автор: Shorr Kan 16.1.2004, 15:32 |
Забыл уточнить - J2RE SE 1.4.2_03. Вот ее я поставил. (если я все правильно понял, то J2RE и JDK - разные вещи...) |
Автор: AntonSaburov 16.1.2004, 15:39 | ||
Надо ставить SDK - только там есть компилятор и еще некторые утилиты. Где найти - можно посмотреть в FAQ, там указано. |
Автор: Sardar 18.1.2004, 03:59 | ||
Не найденна переменная. У меня такое впечатление что ты хочешь изменить цвет панели кнопкой из другой панели. 1) в Javа нет глобальных(никому не пренадлежащих) переменных(и функций тоже) -> Документация -> азы. 2) если ты хочешь изменить свойство обьекта то ты должен иметь на него ссылку, см. выше. Вот простое решение:
Shorr Kan мне кажется, что тебе надо повторить Java с самого начала, с каким-нибудь хорошим учебником. PS. Не открывай второй топик с одинаковой темой. |
Автор: Shorr Kan 19.1.2004, 06:14 |
О, большое спасибо! Именно это и хотел сделать. p.s. Только Java мне не повторять надо... А изучать ![]() |
Автор: summe 9.10.2012, 17:09 | ||||
Здравствуйте! В процессе изучения языка возник вопрос: можно ли в одном фрейме (или апплете) совместить наличие графики Graphucs2D и, например, кнопок или текстовую область? Если компонент с графикой добавляю в фрейм, а затем панель с кнопками, остаются одни кнопки ![]() Например вот так будет только компонент calc, содержащий графику.
А вот так будут только кнопки:
Поясните или ткните носом куда надо, пожалуйста )) |