![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
armixx |
|
|||
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 16.8.2010 Репутация: нет Всего: нет |
Всем добрый день.
Решаю задачу: Надо расположить JTextArea с равномерными отступами слева, справа и сверху от краёв фрейма, под ним JButton, расположенный в центре, с равномерным отступом от JTextArea и нижнего края фрейма. Мне показалось, что наиболее удобным для этого является SpringLayout. Сделал так: ..... sl=new SpringLayout(); Container cp=getContentPane(); cp.setLayout(sl); jS=new JScrollPane(); jB=new JButton("Завершить"); jB.addActionListener(new ActionListener() {...}); jB.setPreferredSize(new Dimension(140,20)); m_Text=new JTextArea(); int tw=r.width-20,th=r.height-100; m_Text.setEditable(false); m_Text.setFocusable(false); m_Text.setBackground(getBackground()); jS.getViewport().add(m_Text,null); jS.setPreferredSize(new Dimension(tw,th)); jS.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); jS.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); cp.add(jS); cp.add(jB); Spring strut=Spring.constant(10); Spring sprin=Spring.constant(0,100,10000); sl.putConstraint(SpringLayout.WEST,jS,strut,SpringLayout.WEST,cp); sl.putConstraint(SpringLayout.EAST,jS,strut,SpringLayout.EAST,cp); sl.putConstraint(SpringLayout.NORTH,jS,strut,SpringLayout.NORTH,cp); sl.putConstraint(SpringLayout.SOUTH,jS,strut,SpringLayout.NORTH,jB); sl.putConstraint(SpringLayout.SOUTH,jB,strut,SpringLayout.SOUTH,cp); ...... Имею отступ JTextArea от левого и верхнего краёв фрейма. На правом крае видна только половинка вертикального JScrollPane. Горизонтальный JScrollPane плотно примыкает к нижнему краю. Кнопки вообще не видно. Скорее всего, я неправильно понимаю смысл "пружин" и "распорок". |
|||
|
||||
aleksandy |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 260 Регистрация: 17.12.2006 Репутация: 1 Всего: 5 |
Самым удобным, я думаю, будет BorderLayout() в главном контейнере. JTextArea добавляешь в центр, предварительно выставив ему необходимые Insets. На юг всавляешь панельку с FlowLayout(FlowLayout.CENTER). Для южной панельки тоже выставляешь Insets. |
|||
|
||||
armixx |
|
|||
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 16.8.2010 Репутация: нет Всего: нет |
Спасибо.
Для моей задачи подошёл BoxLayout. Очень удобненько и без проблем. Если интересно, то вот код: Container cp=getContentPane(); JScrollPane jS=...; JButton jB=...; ..... Box bh=Box.createHorizontalBox(); bh.add(Box.createHorizontalStrut(10)); bh.add(jS); bh.add(Box.createHorizontalStrut(10)); BoxLayout boxy=new BoxLayout(cp,BoxLayout.Y_AXIS); cp.setLayout(boxy); cp.add(Box.createVerticalStrut(5)); cp.add(bh); cp.add(Box.createVerticalStrut(5)); cp.add(jB); cp.add(Box.createVerticalStrut(5)); ..... Со Springом решил не возиться. Для серьёзных компоновок я в дизайнере NetBeansа использую FreeLayout (ещё та штучка), а для "ручных" подумывал Spring освоить, но ну его на фиг. А вот Box действительно и эластичный и удобный. |
|||
|
||||
Skynin |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 1.7.2007 Где: Харьков Репутация: нет Всего: 10 |
Вот чего не пойму, так это мужественных мучений с штатными лайот манагерами.
Нет чтобы MiG layout или JGoodies, не, надо мучится, страдать, а в итоге то что? Какие сверх мудреные интерфейсы?
Там лучше использовать GroupLayout Это сообщение отредактировал(а) Skynin - 19.9.2010, 23:05 |
|||
|
||||
Skipy |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 487 Регистрация: 24.8.2006 Где: Москва, Россия Репутация: 4 Всего: 16 |
Мучается тот, кто их не понимает. Я могу написать любой интерфейс безо всяких мучений
Имхо, JGoodies более мудреный, чем GBL. И зачем мне еще одна зависимость? |
||||
|
|||||
Skynin |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 1.7.2007 Где: Харьков Репутация: нет Всего: 10 |
И я могу. А самое главное - а с какими усилиями придется изменять этот "любой интерфейс"?
Мне как-то встречаются программы на Java у которых десятки библиотек в папочке libs Но конечно, можно изобретать велосипеды, и писать все самому. Время работы программиста - главная часть себестоимости продукта. А не - "у моей программы на одну зависимость меньше". Да пусть их на 20 штук больше будет, если ты напишешь/модифицируешь работающий код за неделю а не за месяц Но, дело работодателя конечно. |
||||
|
|||||
Skipy |
|
||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 487 Регистрация: 24.8.2006 Где: Москва, Россия Репутация: 4 Всего: 16 |
С теми же, с какими и писать. Легко и непринужденно.
Мне тоже встречаются. А потом оказывается, что библиотека на 2Мб подтянута ради одного класса, который можно написать за 10 минут. А эту библиотеку еще найти надо было. Я встречал подключение commons-io, кажется, ради единственного метода FileUtils - чтение текстового файла по строкам. У меня этот код занимает меньше 10 строк и пишется за две минуты практически вслепую.
Можно. В особенности велосипеды любят разрабатывать те, кто не понимает, как работают стандартные раскладки.
В основном так. Только вот сюда входит и поддержка. Что будете делать, если обнаруживается ошибка в сторонней библиотеке? А времени на исправление ситуации у Вас - день, дальше начинаются штрафные санкции. А иногда еще оказывается, что из-за неудачной зависимости, на которую прочно завязались, приходится переписать половину приложения. Взяли библиотеку версии 2.0, в версии 3.0 она пошла категорически не туда (= непригодна к использованию), 2.0 не поддерживается. Баги не исправляются. Брать код, разбираться и продолжать разрабатывать самим? А если его нет? Убить кучу времени на переход на что-то новое?
Спешка хороша при ловле блох. Чем больше сторонних зависимостей - тем меньше Вы контролируете приложение. У нас один заказчик на КАЖДУЮ библиотеку требовал предоставления информации о ее производителе, поддержке, тестировании, количестве багов и т.п. И обоснование, почему мы используем именно стороннюю библиотеку, а не пишем это сами. И по большому счету он прав. Потому что когда в production-режиме вылезет ошибка, которая парализует работу банка по всей стране - заказчик потеряет огромные деньги. И вывернет поставщика наизнанку. И в этом случае никого не будут волновать три сэкономленные недели. А волновать будет одно - как в production пошел код, содержащий ошибки. P.S. А Вы никогда не встречались с ограничением "объем клиентского приложения не должен превышать 10Мб"? И что Вы будете делать в этом случае с 20 дополнительными зависимостями? |
||||||||||
|
|||||||||||
Skynin |
|
||||||||||||||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 1.7.2007 Где: Харьков Репутация: нет Всего: 10 |
С "детства" слышал это от - опытных ассемблирщиков, в спорах с Сишниками. От отпытных Сишников, в спорах с С++сниками и т.д.
А потом оказывается что что в новой версии и этот класс не используется, а библиотека в поставку входит. У Вас есть статистика по ПО на Java чтобы брать за аргумент - "подтянута ради одного класса"?
Или находящиеся в перманентном ужасе от обилия инструментов и проблемы выбора.
В КАКОЙ библиотеке? Мы говорим о библиотеках раскладки. Будете настаивать что вероятность ошибки в них такая же, как в библиотеке какой-нить встраиваемой OODB или "SwingX"?
А если ошибка в Вашей собственной библиотеке, написанной год тому, а времени у Вас - час, а дальше расстрел?
И каков же размер приложения, что половину - 1000 строк? И опять - какова вероятность этого "иногда" в конкретном случае - библиотека раскладок?
А если голова у программистов оказывается только видимость? Увольнять и искать новых? А сроки то, неделя! Про наличие кода всегда думать нужно - ЗАРАНЕЕ.
Самоуверен тот, кто думает что если он написал свое приложение, то он его хорошо контролирует. Насчет же спешки - если клиент присажен на твое ПО, то конечно можно и не спешить.
Вы опытный программист. Ну что, ей Богу за обилие в аргументации - иногда, "у нас один", и т.д.?
А если писать ПО для атомных станций, то еще и человеческие жизни может заказчик потерять. Не надо впадать в крайности от этих ужасов.
Встречался. Только оно обычно в действительности означает: Приложение хранится на сервере Старт приложения должен выполняться за не более чем ... сек Скорость канала может быть ... Кб/с А это, согласитесь другие требования, которые да, можно реализовать с помощью "объем клиентского приложения не должен превышать 10Мб" Еще мне Ваш пост напомнил одну главу из "Зри в корень" Маковецкого: "Взвешивание яблока" А Вы учли испарения жидкости и реактивный момент этого? А притяжение Сатурна? А ... А ... |
||||||||||||||||||||||
|
|||||||||||||||||||||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |