Один из вопросов, которые часто задаются на собеседовании Java-программистов касается работы со строками. Этот вопрос связан с построением новых строк. Звучит он следующим образом: "В чем разница между String, StringBuffer и StringBuilder?".
Core Java, Java EE, GWT, GXT, EXT GWT, JavaScript, CSS, HTML, jQuery, jQuery Mobile, PhoneGap, iOS, Android, GAE, Python
Поиск по этому блогу
понедельник, 17 декабря 2012 г.
воскресенье, 16 декабря 2012 г.
Отключаем сортировку в таблице GXT
Иногда нужно, чтобы содержимое таблицы нельзя было отсортировать. Для этого нужно отключить возможность сортировки. Ниже приведены различные методы отключения сортировки в таблице. Каждый из них не отключает полностью сортировку, а отключает только какую-то определенную функциональность.
Как считать строку String, используя метод readLine() класса BufferedReader
В GXT в ячейке таблицы Grid нужно было сделать так, чтобы строка, приходящая из таблицы,
отображаласть не в одну строку, а в несколько. Строка в таблице хранилась с использованием специальных символов переноса строки и переноса каретки \r\n. Однако, когда данная строка загружалась в таблицу, она все равно отображалась как одна строка.
пятница, 30 ноября 2012 г.
GXT TextField Validator с преобразованием введенной строки
Создание валидаторов для полей ввода является стандартной задачей, с которой сталкиваются разработчики. В GXT процесс установки валидатора для текстового поля очень прост. В моем случае необходимо создать валидатор для текстового поля. Условия следующие.
В тестовое поле можно вводить только числа в формате xxx-xxx-xxxx или xxxxxxxxxx. Причем число введенное в формате xxxxxxxxxx должно после ввода автоматически преобразоваваться к виду xxx-xxx-xxxx. Напрмер, вводим 1234567890 убираем фокус и получаем, что в текстовом поле содержится 123-456-7890.
В тестовое поле можно вводить только числа в формате xxx-xxx-xxxx или xxxxxxxxxx. Причем число введенное в формате xxxxxxxxxx должно после ввода автоматически преобразоваваться к виду xxx-xxx-xxxx. Напрмер, вводим 1234567890 убираем фокус и получаем, что в текстовом поле содержится 123-456-7890.
четверг, 29 ноября 2012 г.
Создаем свой Column Renderer для столбца таблицы. GXT
При работе с таблицами зачастую возникает необходимость отображать в ячйке таблицы нестандартное содержимое (содержимое отличное от простого текста). Таким содержимым может быть, например, комбобокс, текстовое поле, кнопка или даже панель, на которой могут быть и кнопки и комбобоксы и текстовые поля вместе. Для реализации отображения в ячейке таблицы такого содержимого необходимо столбцу, в котором это будет отображаться установить renderer. Renderer определяет, как будет отрисовываться содержимое каждой ячейки столбца.
понедельник, 26 ноября 2012 г.
Работа с CheckBoxSelectionModel в Grid. GXT
Модель выделения CheckBoxSelectionModel в Grid используется для того, чтобы можно было выделять строки и помечать выделенные строки галочками. Скорее всего эту модель выделения будут использовать когда есть необходимость выделить какую-то часть строк и совершить над ней определенные действия, например удалить или сформировать какой-нибудь отчет.
Перед тем как создать таблицу нужно для этого кое-что подготовить.
Создаем список конфигураций для столбцов таблицы.
List<ColumnConfig> configs = new ArrayList<ColumnConfig>();
Создаем store для хранения моделей, которые являются строками таблицы.
ListStore store = new ListStore<ModelData>();
Перед тем как создать таблицу нужно для этого кое-что подготовить.
Создаем список конфигураций для столбцов таблицы.
List<ColumnConfig> configs = new ArrayList<ColumnConfig>();
Создаем store для хранения моделей, которые являются строками таблицы.
ListStore store = new ListStore<ModelData>();
вторник, 20 ноября 2012 г.
Изменение ширины содержимого ячейки таблицы, если это содержимое является виджетом. GXT.
В ячейке таблицы может содержаться не просто текст, а какие то сложные компоненты, например комбобокс, кнопка, текстовое поле или даже панелька (содержащая в себе текстовые поля и кнопки сразу). Чтобы при изменении ширину таблицы содержимое ячейки изменялось соответственно и аккуратно вписывалось в ячейку, нужно добавить к таблицы listener на событие изменения ширины столбцов и при изменении ширины столбцов соответственным образом изменять ширину содержимого ячейки.
вторник, 2 октября 2012 г.
Вопросы на собеседовании Java программиста. Чем абстрактный класс отличается от интерфейса.
Каждый программист в своей жизни ходил на собеседования. Иногда спрашивают очевидные вещи, которые ты тысячи раз делал, но при этом не до конца знаешь все их тонкости. И вот для того чтобы систематизировать знания и придать четкости всем неясностям я решил начать серию статей под общим названием "Вопросы на собеседовании Java программиста". В каждой статье буду разбирать один вопрос. И вот первый, один из самых простых и самых интересных на мой взгляд вопросов - "Чем абстрактный класс отличается от интерфейса?"
вторник, 25 сентября 2012 г.
Как в GXT изменить ширину столбца таблицы по нажатию кнопки
Иногда возникает необходимость изменять ширину столбца таблицы динамически в зависимости от того какой ширины будет содержимое в ячейке.
width = // вычисляем новую ширину столбца
// задаем столбцу новую ширину - 5 - номер столбца
grid.getColumnModel().getColumn(5).setWidth(width);
// перерисовываем таблицу с новым значением ширины столбца
// перерисовываем таблицу с новым значением ширины столбца
grid.getView().refresh(true);
// теперь, если у нас в столбце содержится не просто текст, а // сложный элемент,например ContentPanel, то содержимое тоже // нужно растянуть на новую длину
for (int i = 0; i < grid.getStore().getCount(); i++) {
Widget widget = grid.getView().getWidget(i, 5);
BoxComponent bc = ((BoxComponent) widget);
ContentPanel cp = (ContentPanel) bc;
// отнимаем 10 для того чтобы содержимое хорошо вписывалось в //столбец
// теперь, если у нас в столбце содержится не просто текст, а // сложный элемент,например ContentPanel, то содержимое тоже // нужно растянуть на новую длину
for (int i = 0; i < grid.getStore().getCount(); i++) {
Widget widget = grid.getView().getWidget(i, 5);
BoxComponent bc = ((BoxComponent) widget);
ContentPanel cp = (ContentPanel) bc;
// отнимаем 10 для того чтобы содержимое хорошо вписывалось в //столбец
cp.setWidth(width - 10);
}
}
вторник, 18 сентября 2012 г.
Некоторые методы класса ContentPanel в GXT
Приведу тут обзор некоторых методов класса ContentPanel.
ContentPanel cp = new ContentPanel();
// делаем панель сворачиваемой
cp.setCollapsible(true);
// цвет фона - белый
cp.setBodyStyle("backgroundColor: white;");
// закругленные углы
cp.setFrame(true);
// убираем заголовок
cp.setHeaderVisible(false);
воскресенье, 16 сентября 2012 г.
Как отключить клавишу Enter в компоненте TextArea в GXT
Новый день преподносит новые тривиальные задачи. Однако для меня как для начинающего разработчика даже самые простые задачи могут отнять много времени и показаться очень сложными. Вот, сегодня, например, столкнулся с задачей отключения перевода указателя каретки с одной строки на другую по клавише Enter в компоненте TextArea.
public void componentKeyPress(final ComponentEvent event) {
if (event.getKeyCode() == 13) {
event.stopEvent();
}
}
});
* This source code was highlighted with Source Code Highlighter.
TextArea notes = new TextArea();
notes.addKeyListener(new KeyListener() {public void componentKeyPress(final ComponentEvent event) {
if (event.getKeyCode() == 13) {
event.stopEvent();
}
}
});
* This source code was highlighted with Source Code Highlighter.
пятница, 14 сентября 2012 г.
Как удалить элемент со страницы в Javascript и в JNI
Снова столкнулся с задачей в которой необходимо использовать native javascript. На этот раз необходимо удалить элемент со страницы.
Как удаление элемента делается в JavaScipt
function removeElement(id) {
var element = document.getElementById(id);
element.parentNode.removeChild(element);
}
А вот как это удаление мы сделаем в Java
Создаем native метод для удаления элемента.
public static native void removeElFromPage(final com.google.gwt.dom.client.Element el)
/*-{el.parentNode.removeChild(el);
}-*/;
А тут собственно вызов этого метода
com.google.gwt.dom.client.Element el = Document.get().getElementById("diagReport");
if (el != null) {
removeElFromPage(el);
}
Как выровнять checkbox по центру в GXT
Казалось бы совершенно тривиальные задачи порой могут занять очень много времени. Причиной может быть обычное незнание рабочего способа. Вроде используешь методы, а они все не работают. Вот проверенный способ, чтобы выровнять checkbox по центру.
CheckColumnConfig() newCheckColumnConfig = new CheckColumnConfig();
newCheckColumnConfig.setHeader("New");
newCheckColumnConfig.setId("isNew");
newCheckColumnConfig.setWidth(50);
newCheckColumnConfig.setStyle("vertical-align:middle;");
четверг, 6 сентября 2012 г.
Как запустить jar файл из java программы
В проекте понадобилось запустить jar файл с параметрами из приложения.
Вот небольшая тестовая программа которая запускает jar файл из java-кода.
import java.io.IOException;
public class ReportTest {
public static void main(String[] args) throws IOException {
String filePath = "C:/develop/workspaces/first/myfile.jar ";
String param1 = " value1 ";
String param2 = " value2 ";
String param3 = " value3 ";
Runtime re = Runtime.getRuntime();
try{
re.exec("java -jar " + filePath + param1 + param2 + param3);
} catch (IOException ioe){
ioe.printStackTrace();
}
}
}
* This source code was highlighted with Source Code Highlighter.
вторник, 21 августа 2012 г.
Небольшой пример работы с JSNI в GWT/GXT
Задача состоит в следующем - по нажатию на кнопку должен сработать переход по ссылке.
Java Script Native Interface позволяет Java разработчику работающему с GWT / GXT использовать в своем коде вставки на чистом JavaScript. У элемента ссылка есть метод click(), именно его мы и будем вызывать при помощи JSNI.
import com.extjs.gxt.ui.client.widget.Html;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.Label;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.SelectionListener;
public class SomeForm {
// html фрагмент
private final Html templateLink;
// нативный метод, который вызывает метод click() у переданного ему элемента
public static native void click(final com.google.gwt.dom.client.Element el)
/*-{
el.click();}
-*/;
// адрес ссылки
private static final String TEMPLATE_URI = "some/uri";
public SomeForm()
{
...
// создаем кнопку и ее обработчик
// по щелчку на кнопке вызывается переход по сслыке
Button someButton = new Button("Some Button", new SelectionListener<ButtonEvent>() {
@Override
public void componentSelected(final ButtonEvent ce) {
com.google.gwt.dom.client.Element el =
Document.get().getElementById("jsniClick");
click(el);
}
});
// добавляем кнопку и ссылку на панель
ContentPanel cpLeft = new ContentPanel();
cpLeft.setHeaderVisible(false);
cpLeft.setBodyBorder(false);
cpLeft.setButtonAlign(HorizontalAlignment.LEFT);
cpLeft.addButton(someButton);
templateLink = new Html("<a id='jsniClick' href='" + TEMPLATE_URI + "'></a>");
cpLeft.add(new Label(templateLink.getHtml()));
add(cpLeft);
}
}
* This source code was highlighted with Source Code Highlighter.
Подписаться на:
Сообщения (Atom)