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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Маленькие классы, Помощники 
:(
    Опции темы
jer1
Дата 1.2.2006, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 123
Регистрация: 24.1.2005
Где: Харьков Украина

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



Название: Утилита для смены кодировок
Тип: автономное консольное приложение
Язык: Java
Версия: 1.0
Версия JDK: 1.5
Требуемые библиотеки: нет
Автор:jer1
Примечания: код оформлен с использованием синтаксиса 1.5


1. ОПИСАНИЕ класса(ов)
Класс предназначен для смены кодировок файлов.
Похожие программы: iconv (Linux), Штирлиц (Windows).
Программу можно изменить под более старую версию jdk, но не ниже
1.4 ( причина: зависимость от пакета java.nio )

2. РЕКОМЕНДАЦИИ по использованию, примеры
Это вспомогательная утилита к уже имеющимся средствам перекодирования.
Обладает всеми преимуществами программы написанной на языке java :^)

java ru.vingrad.util.CharsetConverter -h
- выводит справку по использованию:
Usage: UseCharset [-options] [FILES]
where options include:
-f <input encoding> if missed default encoding is used
-t <output encoding> if missed default encoding is used
-l list all supported charsets according to IANA Charset Registry
-h this help

java ru.vingrad.util.CharsetConverter -l
- выводит список поддерживаемых charsetov:
Name: Big5
Aliases: [csBig5]

Name: Big5-HKSCS
Aliases: [big5-hkscs, big5hk, big5-hkscs:unicode3.0, big5hkscs, Big5_HKSCS]

Name: EUC-JP
Aliases: [eucjis, x-eucjp, csEUCPkdFmtjapanese, eucjp,
Extended_UNIX_Code_Packed_Format_for_Japanese, x-euc-jp, euc_jp]
...


java ru.vingrad.util.CharsetConverter -f windows-1251 hunter.html | more
- переводит содержимое файла hunter.html из кодировки windows-1251
можно использовать также алиасы: ansi-1251, cp1251, cp5347
в текущую кодировку, стандартный вывод затем передаётся на вход программе
more

java ru.vingrad.util.CharsetConverter -t iso-8859-5
- переводит стандартный ввод в кодировку iso-8859-5

java ru.vingrad.util.CharsetConverter -f koi8-r CharsetConverter.java -t utf8 > \
CharsetConverter.utf.java
- переводит содержимое файла CharsetConverter.java из кодировки koi8-r в utf8,
результат затем сохраняется в файле CharsetConverter.utf.java


3. КОД, руководство по сборке

Код


package ru.vingrad.util;

import static java.lang.System.*;
import java.io.*;
import java.nio.*;
import java.nio.channels.*;
import java.nio.charset.*;
import java.util.*;
import java.util.logging.*;


/**
  Перекодировщик файлов или стандартного ввода. 
  
  <p>На вход получает входную, выходную кодировку и набор файлов (если файлы не заданы
  используется стандартный ввод). Результат - файлы (консольный ввод) в выходном потоке с
  параметрической кодировкой.   
  
  @author jer1
  @version 1.0
*/
public final class CharsetConverter {
    static final String HELP_MESSAGE = 
        "Usage:  UseCharset [-options] [FILES] \n" +
        "where options include: \n" +
        "    -f <input encoding>     if missed default encoding is used\n" +
        "    -t <output encoding>    if missed default encoding is used \n" +
        "    -l    list all supported charsets according to IANA Charset Registry\n" +
        "    -h    this help \n";
    static final String UNSUPPORTED_CHARSET_MESSAGE = "Sorry, charset [%s] is not supported yet.\n";                     
    static final int UNSUPPORTED_CHARSET_ERROR_CODE = 1;                     

    List<String> files = new ArrayList<String>(); 
    Charset inCharset  = Charset.defaultCharset() ;
    Charset outCharset = Charset.defaultCharset() ;

    private CharsetConverter() {} // prevent creation

    /** 
       Устанавливает входную кодировку. 
       Если указаная кодировка не поддерживается вводится соответствующее сообщение и 
       выход из приложения по ошибке с номером {@link CharsetConverter#UNSUPPORTED_CHARSET_ERROR_CODE}.

       @param charsetName имя кодировки
     */
    void setInCharset(String charsetName) {
        if (Charset.isSupported(charsetName)) {
            inCharset = Charset.forName(charsetName);
        } else {
            err.printf(UNSUPPORTED_CHARSET_MESSAGE, charsetName );
            System.exit(UNSUPPORTED_CHARSET_ERROR_CODE);
        }
    }

    /** 
       Устанавливает выходную кодировку. 
       Если указаная кодировка не поддерживается вводится соответствующее сообщение и 
       выход из приложения по ошибке с номером {@link CharsetConverter#UNSUPPORTED_CHARSET_ERROR_CODE}.

       @param charsetName имя кодировки
     */
    void setOutCharset(String charsetName) {
        if (Charset.isSupported(charsetName)) {
            outCharset = Charset.forName(charsetName);
        } else {
            err.printf(UNSUPPORTED_CHARSET_MESSAGE, charsetName );
            System.exit(UNSUPPORTED_CHARSET_ERROR_CODE);
        }
    }

    /** Добавляет файл к списку файлов, которые необходимо перекодировать. */  
    void addFile4Recoding(String fname) { 
        if (! new File(fname).exists()) { 
            System.err.printf("file [%s] does not exist\n", fname );
        } else files.add(fname);
    }  

    /** 
       Говорит есть ли файлы для перекодирования.
       @return true - есть файлы для перекодирования, false - иначе 
     */
    boolean hasFiles() { return files.size() > 0; }

    /**
       Изменяет кодировку файлов.
       Результат отправляется в стандартный вывод (т.е. сами файлы не меняются).

       @throws IOException при возникновении таковых
     */
    void recodeFiles() throws IOException {
        CharsetDecoder charDecoder = inCharset.newDecoder();
        CharsetEncoder charEncoder = outCharset.newEncoder();
        for (String fname: files) { 
            RandomAccessFile raf = new RandomAccessFile( fname, "r" );
            FileChannel fc = raf.getChannel();
            MappedByteBuffer inData = fc.map( FileChannel.MapMode.READ_ONLY, 0, fc.size() );
            CharBuffer tmpCharBuffer = charDecoder.decode(inData);
            ByteBuffer outData = charEncoder.encode(tmpCharBuffer);
            while(outData.hasRemaining()) {
                out.write(outData.get());
            }
            raf.close();
        }   
    }

    /**
       Читает стандартный поток ввода и применяет к нему соответствующую кодировку,

       @throws IOException при возникновении таковых
     */
    void recodeConsoleInput() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        String s;
        while ( (s=br.readLine()) != null) sb.append(s).append("\n");
        CharsetEncoder encoder = outCharset.newEncoder(); 
        String input = sb.toString(); 
        CharBuffer cb = CharBuffer.wrap(input);
        ByteBuffer outData = encoder.encode( cb );

        while(outData.hasRemaining()) {
            out.write(outData.get());
        }
    }

    /** Выводит в стандартный поток вывода все поддерживаемые кодировки. */
    void listAllCharsets() {
        SortedMap<String, Charset> charsets = Charset.availableCharsets();
        for (String canonicalName:charsets.keySet()) {
            out.println("Name: " + canonicalName);      
            out.print("Aliases: ");
            out.println(charsets.get(canonicalName).aliases());
            out.println();
        }
    }

    /** Выводит справку по программе. */
    static void help() {
        err.println(HELP_MESSAGE);
        System.exit(0);
    }


    static public void main( final String args[] ) throws IOException {
        CharsetConverter converter = new CharsetConverter();
        int idx = 0;
        while (idx < args.length) {
            if ("-l".equalsIgnoreCase(args[idx])) {
                converter.listAllCharsets();
                System.exit(0);
            } else
            if ("-h".equalsIgnoreCase(args[idx])) {
                    CharsetConverter.help();
            } else 
            if ("-f".equalsIgnoreCase(args[idx])) {
                 converter.setInCharset(args[++idx]);
                  ++idx;
            } else 
            if ("-t".equalsIgnoreCase(args[idx])) {
                converter.setOutCharset(args[++idx]);
                ++idx;
            } else { 
                 converter.addFile4Recoding(args[idx]);
                 ++idx;
            }
        }
        if (converter.hasFiles()) converter.recodeFiles();
        else converter.recodeConsoleInput();
    }
}




--------------------
:w!q
PM MAIL   Вверх
Wowa
Дата 9.2.2006, 02:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



Цитата(Guest @ 16.1.2006, 19:28 Найти цитируемый пост)

Тогда предлагаю обсуждать каждый "маленький класс" в своей ветке, а эту сделать рид-онли и складывать в нее готовые версии

У меня есть предложение сделать для классов отдельный подфорум может... В котором на каждый класс будет создаваться отдельная тема. А сам класс помещать в ФАК. Там можно создать древовидное меню.

Цитата(Zandr @ 17.1.2006, 09:57 Найти цитируемый пост)

По поводу комментов на русском языке... Нет комментов. Лично я против. Комменты на русском делайте к 1С Бухгалтерии.

Хм.. Ну как бы и да, и нет. Вообще на русском очень мало инфы по программированию, поэтому поддержать было бы неплохо.
Хотя конечно - англ. - это стандарт.

Цитата(LSD @ 17.1.2006, 16:05 Найти цитируемый пост)

Вдруг мы захотим хранить 2 версии, старую и доработанную (например выйдет Mustang и мы захотим доработать класс под него)?

Правильно. Я думаю, что версию класса обязательно следует указывать. Т.к. класс может быть скопирован с винграда и где-либо еще размещен.
Тогда с версиями путаница будет. Поэтому - указываем.


P.S. А что касается CVS, то у нас стоит на сервере Subversion. Если его как-то можно к библиотеке классов присоединить - давайте подумаем.
Тогда получится, что каждый будет в состоянии редактировать чужие классы. Дорабатывать их и и под тем же именем записывать. Что нехорошо, поэтому публикация тогда под другим именем и названием должна происходить. Но иметь в наличии 10 аналогичных классов - имхо тоже нехорошо..
PM WWW   Вверх
jer1
Дата 5.4.2006, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 123
Регистрация: 24.1.2005
Где: Харьков Украина

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



hi,
вот нашел простой апргрейт: следует в исходном коде ru.vingrad.util.CharsetConverter

заменть 1 блок на 2 блок - это позволит игнорировать ошибки связаные с преобразованиями символов и безмятежно продолжить выполнение программы

smile

Код



// 1 блок 
 void recodeFiles() throws IOException {
        CharsetDecoder charDecoder = inCharset.newDecoder();
        CharsetEncoder charEncoder = outCharset.newEncoder();

// 2 блок 
 void recodeFiles() throws IOException {
        CharsetDecoder charDecoder = inCharset.newDecoder()
                .onMalformedInput(CodingErrorAction.IGNORE)
                .onUnmappableCharacter(CodingErrorAction.IGNORE);

        CharsetEncoder charEncoder = outCharset.newEncoder()
                .onMalformedInput(CodingErrorAction.IGNORE)
                .onUnmappableCharacter(CodingErrorAction.IGNORE);


--------------------
:w!q
PM MAIL   Вверх
ShamanTrirukiy
Дата 20.4.2006, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 12.4.2006
Где: Харьков

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



Название: Модель, обеспечивающая ввод дробных чисел
Тип: класс
Язык: Java
Версия: 1.5.0_06
Версия JDK: 1.5
Требуемые библиотеки: нет
Авторы: ShamanTrirukiy && Ortega
Примечания: будет ли работать на версиях, ранее 1.43 - неизвестно (PlainDocument в таком виде, в каком он используется, появился в 1.43)

1. Описание класса

Класс предназначен для обеспечения ввода текста в виде дробного числа.
Конструктор класса принимает в качестве аргумента максимальное количество знаков после запятой(по умолчанию Integer.MAX_VALUE). Количество знаков после запятой должно быть больше нуля, иначе будет выброшено исключение(IllegalArgumentException).

2. Рекомендации по использованию, примеры

Класс рекомендуется к использованию, везде где надо обеспечить ввод дробных чисел.

Пример использования класса: Создадим JTextField, в который будет возможным вводить только дробные числа

Код

JTextField tempTextField = new JTextField();
tempTextField.setDocument(new FloatDocument());


установим количество знаков после запятой равным 3:

Код

((FloatDocument)tempTextField.getDocument()).setAfterPointPositionCount(3);


Этого же можно достичь следующим образом:

Код

JTextField tempTextField = new JTextField();
tempTextField.setDocument(new FloatDocument(3));


3. Код
Код

package project.ui.design;

import javax.swing.text.*;

/**
 * Модель, обеспечивающая ввод дробных чисел
 * <p>
 * На вход получает максимальное допустимое количество символов после точки
 * (поумолчанию <code>Integer.MAX_VALUE</code>)
 * 
 * @author ShamanTrirukiy && Ortega
 * @see Document
 * @see AbstractDocument
 * @see PlainDocument
 */
public class FloatDocument extends PlainDocument {
  private int afterPointPositionsCount = 0;

  public FloatDocument() {
    this(Integer.MAX_VALUE);
  }

  public FloatDocument(int afterPointPositionCount) {
    super();
    setAfterPointPositionCount(afterPointPositionCount);
  }

  /**
   * Перегруженный метод <code>PlainDocument</code>, обеспечивающий
   * правильность ввода
   */
  @Override
  public void insertString(int offs, String str, AttributeSet a)
      throws BadLocationException {
    if (str == null)
      return;
    Content c = getContent();
    String text = c.getString(0, c.length() - 1) + str;
    if (!text.matches(buildRegEx()))
      return;
    if (text.replace(',', '.').charAt(0) == '.')
      str = "0" + str;
    super.insertString(offs, new String(str.replace(',', '.')), a);
  }

  /**
   * Метод, возвращающий регулярное выражение, необходимое для проверки ввода с
   * учетом количества знаков после точки(в случае, если оно меньше нуля
   * выбрасывает <code>IllegalArgumentException</code>)
   */
  private String buildRegEx() {
    if (afterPointPositionsCount < 0)
      throw new IllegalArgumentException(
          "afterPointPositionsCount couldn't be less than 0");
    return "\\d+([\\.,]\\d{0," + afterPointPositionsCount + "})?";
  }

  /**
   * Устанавливает максимальное допустимое количество знаков после
   * точки
   */
  public void setAfterPointPositionCount(int afterPoint) {
    this.afterPointPositionsCount = afterPoint;
  }
}


 
PM MAIL   Вверх
ShamanTrirukiy
Дата 20.4.2006, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 12.4.2006
Где: Харьков

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



Более общий случай:

Код

import javax.swing.text.*;

/**
 * Модель, обеспечивающая ввод строки в формате, заданном регулярным выражением
 * <p>
 * На вход получает регулярное выражение
 *  
 * @author ShamanTrirukiy
 * @see Document
 * @see AbstractDocument
 * @see PlainDocument
 */
public class RegExDocument extends PlainDocument {

  String regularExpression;

  public RegExDocument(String regularExpression) {
    super();
    setRegularExpression(regularExpression);
  }

  /**
   * Перегруженный метод <code>PlainDocument</code>, обеспечивающий
   * правильность ввода
   */
  @Override
  public void insertString(int offs, String str, AttributeSet a)
      throws BadLocationException {
    if (str == null)
      return;
    Content c = getContent();
    String text = c.getString(0, c.length() - 1) + str;
    if (!text.matches(getRegularExpression()))
      return;
    super.insertString(offs, new String(str.replace(',', '.')), a);
  }

  /**
   * Метод, возвращающий регулярное выражение
   */
  public String getRegularExpression() {
    return regularExpression;
  }

  /**
   * Метод, устанавливающий регулярное выражение
   */
  public void setRegularExpression(String regularExpression) {
    this.regularExpression = regularExpression;
  }
}


Например, для ввода только чисел все сведется к 
Код

...setDocument(new RegExDocument("\\d+"));


По-моему, очень даже удобно 
PM MAIL   Вверх
Sleepy_PIP
Дата 26.4.2006, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вниманию предлагается микро библиотечка,
куда собрал кое-что уровня "велосипед", дабы эти велосипеды народ не изобретал опять и опять.
Может буду дальше расширять - не знаю.
В библиотечке на сей момент есть:.
1. округление с заданной точностъю
2. копирование и переименование ф., работающее и между томами
3. Сумма прописью для USD и RUR - в принципе ее можно расширять и далее.

Вроде все работает ...

такие вот дела.  

Документация прилагается (внутри архива).
 

Присоединённый файл ( Кол-во скачиваний: 16 )
Присоединённый файл  piplib.rar 44,96 Kb


--------------------
--
Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем
свободным ..."
PM MAIL ICQ   Вверх
Sleepy_PIP
Дата 27.4.2006, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



извините, поправил грамм. ошибку в наименовании доллора smile.
Что-б сильно не злились - добавил 2 полезных метода для изменения даты на дни или месяца.


 

Присоединённый файл ( Кол-во скачиваний: 27 )
Присоединённый файл  piplib.rar 48,53 Kb


--------------------
--
Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем
свободным ..."
PM MAIL ICQ   Вверх
powerOn
Дата 1.5.2006, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Название:  Градиентная полоса прогресса
Тип: класс
Язык: Java
Версия: 1.0
Версия JDK: 1.5
Требуемые библиотеки: нет
Автор: MoonCat

Представляю Вашему вниманию градиентный прогресс бар с поддержкой состояния Indeterminate.
Код не сложный и подробно прокомментирован, в добавок я написал пример использования.

Код Полосы Прогресса:

Код


import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.image.BufferedImage;
import javax.swing.JProgressBar;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.plaf.ComponentUI;

/**
 *
 * @author MoonCat
 */
public class GradientProgressBar extends JProgressBar implements Runnable {
    
    // Используется для внеэкранной прорисовки изображения прогресс полосы.
    BufferedImage bi = null;
    // Начальный цвет градиента
    private Color color1 = Color.WHITE;
    // Конечный  цвет градиента.
    private Color color2 = Color.RED;
    // Используется при режиме Indeterminate для сохранения старой позиции полоски.
    private int oldPos = 0;
    
    // Установить Начальный цвет градиента
    public void setColor1(Color color) {
        color1 = color;
    }
    // Получить Начальный цвет градиента
    public Color getColor1() {
        return color1;
    }
    // Установить Конечный цвет градиента
    public void setColor2(Color color) {
        color2 = color;
    }
    // Получить Конечный цвет градиента
    public Color getColor2() {
        return color2;
    }
    
    // Создание компонента.
    // Здесь добавляем слушателя изменения размера, что бы синхронизировать размеры
    // компонента и внеэкранного буфера.
    public GradientProgressBar() {
        addComponentListener(new ComponentAdapter() {
            public void componentResized(ComponentEvent e) {
                super.componentResized(e);
                bi = new BufferedImage(getWidth() + 1, getHeight() + 1, BufferedImage.TYPE_INT_RGB);
                repaint();
            }
        });
    }
    
    
    // Метод отвечает за прорисовку изображения компонента, переопределим его для прорисовки
    // полосы прогресса.
    public void paint(Graphics g) {
        double abs_len = getMaximum() - getMinimum();
        int y = getHeight();
        int x = getWidth();
        double otn = 0;
        int s = 0;
        
        // Если состояние Indeterminate.
        if (isIndeterminate()) {
            int len = (int) x / 5;
            Graphics2D g2 = (Graphics2D) bi.getGraphics();
            g2.setBackground(null);
            
            g2.clearRect(0, 0, x, y);
            GradientPaint paint = new GradientPaint(0, y/2, color1, x, y/2, color2);
            g2.setPaint(paint);
            g2.fillRect(oldPos, 0, len, y);
            
            g.drawImage(bi, 0, 0, null);
            paintBorder(g);
            return;
        }
        
        // Если нет состояния Indeterminate.
        double v = getValue();
        
        if (v != 0) {
            otn = v / abs_len;
            s = (int) (otn * x);
        }
        Graphics2D g2 = (Graphics2D) bi.getGraphics();
        g2.setBackground(null);
        g2.clearRect(0, 0, x, y);
        GradientPaint paint = new GradientPaint(0, y/2, color1, x, y/2, color2);
        g2.setPaint(paint);
        g2.fillRect(0, 0, s, y);
        g.drawImage(bi, 0, 0, null);
        paintBorder(g);
    }
    
    // Метод run выполняется в отдельном потоке, если полоса прогресса находится
    // в состоянии Indeterminate. Этот метод изменяет позицию полоски.
    public void run() {
        while (isIndeterminate()) {
            try {
                Thread.sleep(20);
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
            
            int x = getWidth();
            int len = x / 5;
            if (oldPos > x) {
                oldPos = -len;
            }
            oldPos += 3;
            repaint();
        }
    }
    
    // Переопределяем метод setIndeterminate, чтобы запускать поток изменения позиции полоски в
    // состоянии Indeterminate.
    public void setIndeterminate(boolean newValue) {
        
        if (!isIndeterminate()) {
            if (newValue) {
                (new Thread(this)).start();
            }
        }
        super.setIndeterminate(newValue);
    }
    
}




Пример работы с прогресс баром:

Код


import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JWindow;

/**
 *
 * @author  MoonCat
 */
public class ForProgressBar extends javax.swing.JFrame {
    
    public ForProgressBar() {
        initComponents();
    }
    
    private void initComponents() {
        jSlider1 = new javax.swing.JSlider();
        jToggleButton1 = new javax.swing.JToggleButton();
        gradientProgressBar1 = new swingtest.GradientProgressBar();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Test Frame");
        jSlider1.setMinorTickSpacing(10);
        jSlider1.setPaintTicks(true);
        jSlider1.addChangeListener(new javax.swing.event.ChangeListener() {
            public void stateChanged(javax.swing.event.ChangeEvent evt) {
                jSlider1StateChanged(evt);
            }
        });

        getContentPane().add(jSlider1, java.awt.BorderLayout.SOUTH);

        jToggleButton1.setText("Indeterminate!");
        jToggleButton1.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                jToggleButton1ItemStateChanged(evt);
            }
        });

        getContentPane().add(jToggleButton1, java.awt.BorderLayout.NORTH);

        getContentPane().add(gradientProgressBar1, java.awt.BorderLayout.CENTER);

        jButton1.setText("Color 1");
        jButton1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jButton1MouseClicked(evt);
            }
        });

        getContentPane().add(jButton1, java.awt.BorderLayout.WEST);

        jButton2.setText("Color 2");
        jButton2.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jButton2MouseClicked(evt);
            }
        });

        getContentPane().add(jButton2, java.awt.BorderLayout.EAST);

        pack();
    }

    private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {
        JColorChooser cc = new JColorChooser();
        Color c = cc.showDialog(this, "Select first color.", Color.WHITE);
        jButton1.setForeground(c);
        gradientProgressBar1.setColor1(c);
    }

    private void jButton2MouseClicked(java.awt.event.MouseEvent evt) {
        JColorChooser cc = new JColorChooser();
        Color c = cc.showDialog(this, "Select second color.", Color.WHITE);
        jButton2.setForeground(c);
        gradientProgressBar1.setColor2(c);
    }
    
    private void jToggleButton1ItemStateChanged(java.awt.event.ItemEvent evt) {                                                
        if (jToggleButton1.isSelected()) {
           gradientProgressBar1.setIndeterminate(true);
        } else {
            gradientProgressBar1.setIndeterminate(false);
        }
    }                                               
    
    private void jSlider1StateChanged(javax.swing.event.ChangeEvent evt) {                                      
        gradientProgressBar1.setValue(jSlider1.getValue());
        repaint();
    }                                     
    
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new ForProgressBar().setVisible(true);
            }
        });
    }
    
      
    // Variables declaration - do not modify
    private swingtest.GradientProgressBar gradientProgressBar1;
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JSlider jSlider1;
    private javax.swing.JToggleButton jToggleButton1;
    // End of variables declaration
    
}

  

Это сообщение отредактировал(а) MoonCat - 1.5.2006, 16:09


--------------------
user posted image нет времени думать - нужно писать КОД!

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


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 5.11.2005
Где: Харьков, Украина

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



Название:  Панель для удобной работы с GridBagLayout
Тип: класс
Язык: Java
Версия: 1.0
Версия JDK: 1.4
Требуемые библиотеки: нет
Авторы: Ortega, ShamanTrirukiy

1. Описание класса

Класс предназначен для уменьшения громоздкости и увеличения читабельности кода при работе с GridBagLayout. 

2. Код класса

Код

import java.awt.*;

import javax.swing.*;

class GridBagPanel extends JPanel {

  GridBagConstraints constraints = new GridBagConstraints();

  public GridBagPanel() {
    super(new GridBagLayout());
    setDefaultConstraints();
  }

  public void setDefaultConstraints() {
    constraints.fill = GridBagConstraints.BOTH;
    constraints.anchor = GridBagConstraints.CENTER;
    constraints.weightx = 100;
    constraints.weighty = 0;
    constraints.insets.left = 2;
    constraints.insets.right = 2;
    constraints.insets.top = 2;
    constraints.insets.bottom = 2;
  }

  public void add(Component what, int x, int y, int w, int h) {
    constraints.gridx = x;
    constraints.gridy = y;
    constraints.gridwidth = w;
    constraints.gridheight = h;
    this.add(what, constraints);
  }

  /**
   * @param fill
   *          может принимать одно из значений GridBagConstraints.BOTH
   *          GridBagConstraints.NONE; GridBagConstraints.VERTICAL;
   *          GridBagConstraints.HORIZONTAL;
   */
  public void setFill(int fill) {
    constraints.fill = fill;
  }

  /**
   * @param anchor
   *          GridBagConstraints.EAST; GridBagConstraints.WEST;
   *          GridBagConstraints.SOUTH GridBagConstraints.NORTH,
   *          GridBagConstraints.NORTHEAST; GridBagConstraints.NORTHWEST;
   *          GridBagConstraints.SOUTHEAST; GridBagConstraints.SOUTHWEST
   */
  public void setAnchor(int anchor) {
    constraints.anchor = anchor;
  }

  /**
   * @param weightx
   *          0..100
   */
  public void setWeightx(int weightx) {
    constraints.weightx = weightx;
  }

  /**
   * @param weighty
   *          0..100
   */
  public void setWeighty(int weighty) {
    constraints.weighty = weighty;
  }

  public void setLeftInset(int left_inset) {
    constraints.insets.left = left_inset;
  }

  public void setRightInset(int right_inset) {
    constraints.insets.right = right_inset;
  }

  public void setBottomInset(int bottom_inset) {
    constraints.insets.bottom = bottom_inset;
  }

  public void setTopInset(int top_inset) {
    constraints.insets.top = top_inset;
  }

  public void setInsets(int left_inset, int right_inset, int top_inset,
      int bottom_inset) {

    constraints.insets.left = left_inset;
    constraints.insets.right = right_inset;
    constraints.insets.top = top_inset;
    constraints.insets.bottom = bottom_inset;
  }

  public int getFill() {
    return constraints.fill;
  }

  public int getAnchor() {
    return constraints.anchor;
  }

  public double getWeightx() {
    return constraints.weightx;
  }

  public double getWeighty() {
    return constraints.weighty;
  }

  public int getLeftInset() {
    return constraints.insets.left;
  }

  public int getRightInset() {
    return constraints.insets.right;
  }

  public int getBottomInset() {
    return constraints.insets.bottom;
  }

  public int getTopInset() {
    return constraints.insets.top;
  }

}


3. Пример использования
Код

import javax.swing.*;

public class Test {

  public static void main(String[] args) {
    GridBagPanel gp = new GridBagPanel();
    gp.setWeightx(0);
    gp.add(new JLabel("Value 1:"), 0, 0, 1, 1);
    gp.add(new JLabel("Value 2:"), 0, 1, 1, 1);
    gp.add(new JLabel("Value 3:"), 0, 2, 1, 1);
    gp.setWeightx(100);
    gp.add(new JTextField(), 1, 0, 3, 1);
    gp.add(new JTextField(), 1, 1, 3, 1);
    gp.add(new JTextField(), 1, 2, 3, 1);
    gp.add(Box.createHorizontalGlue(), 1, 3, 1, 1);
    gp.setWeightx(0);    
    gp.add(new JButton("Ok"), 2, 4, 1, 1);
    gp.add(new JButton("Cancel"), 3, 4, 1, 1);
    gp.setWeighty(100);
    gp.add(Box.createGlue(), 0, 3, 4, 1);
    JFrame f = new JFrame();
    f.setContentPane(gp);
    f.setVisible(true);
    f.pack();
  }
}
  

Это сообщение отредактировал(а) Ortega - 29.5.2006, 20:00
--------------------
Всему свое время (с) ЧайфНе парься, будь счастлив (с) Пеппи Длинный Чулок
PM MAIL WWW ICQ Skype GTalk   Вверх
Ortega
Дата 29.5.2006, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 5.11.2005
Где: Харьков, Украина

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



Название:  Панель, позволяющая вызовом одного метода установить свойство enabled для всех компонентов на ней
Тип: класс
Язык: Java
Версия: 1.0
Версия JDK: 1.5
Авторы: Ortega, ShamanTrirukiy

1. Описание класса
Назначение указано в названии. Метод setEnbled перегружен следующим образом: перебираются все компоненты, лежащие на панели и для каждого вызывается метод processComponent(). В данной реализации особым образом обрабатываются JTabbedPane и JSplitPane, а JButton просто прячется. Остальным просто устанавливается указанное значение enabled.

2. Код класса:
Код

import java.awt.*;

import javax.swing.*;

public class EnablingPanel extends JPanel {

  public EnablingPanel() {
    super();
  }

  public EnablingPanel(boolean isDoubleBuffered) {
    super(isDoubleBuffered);
  }

  public EnablingPanel(LayoutManager layout, boolean isDoubleBuffered) {
    super(layout, isDoubleBuffered);
  }

  public EnablingPanel(LayoutManager layout) {
    super(layout);
  }

  @Override
  public void setEnabled(boolean enabled) {
    for (int i = 0; i < getComponentCount(); ++i) {
      processComponent(getComponents()[i], enabled);
    }
    super.setEnabled(enabled);
  }

  protected void processComponent(Component c, boolean enabled) {
    if (c instanceof JLabel)
      return;
    if (c instanceof JTabbedPane) {
      for (int j = 0; j < ((JTabbedPane) c).getTabCount(); ++j)
        ((JTabbedPane) c).getComponentAt(j).setEnabled(enabled);
      return;
    }
    if (c instanceof JButton) {
      c.setVisible(enabled);
      return;
    }
    if (c instanceof JSplitPane) {
      ((JSplitPane) c).getLeftComponent().setEnabled(enabled);
      ((JSplitPane) c).getRightComponent().setEnabled(enabled);
      return;
    }
    c.setEnabled(enabled);

  }

}

 
--------------------
Всему свое время (с) ЧайфНе парься, будь счастлив (с) Пеппи Длинный Чулок
PM MAIL WWW ICQ Skype GTalk   Вверх
_Y_
Дата 23.1.2007, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

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



В другой ветке мне предложили выложить здесь пару классов позволяющих выводить в JTable цветные ячейки. Предупреждаю:
1) Я в Java не гуру. Так что код может быть далеко не идеальным.
2) Классы писались под собственные нужды. Следовательно кому-то придется дописать методы. Для того, чтобы пропостиь их здесь я дописал только комментарии.
3) Выводятся только текстовые данные. В принципе, у меня есть и классы под другие типы данных (Float, Integer, и т.п.), но они просто являются наследниками класса ColoredString (его код ниже). В принципе, логичнее было бы написать класс ColoredObject и наследовать от него, но я писал под свои задачи.

Это класс содержащий текст и цвета:
Код

import java.awt.Color;
import java.io.Serializable;

/**
 * The class unites String with its color scheme. It has been designed to serve for
 * filling of JTable (and may be some other GUI objects) with colored strings.
 * Besides of the text, an object of this class keeps foreground and background
 * colors for both selected and no-selected cases.
 * Needs a special cell renderer (for example, CellRendererColorBkg) to work.
 * @author Y
 * @version 2007-01-23
 */
public class ColoredString implements Comparable, Serializable {
    private static final long serialVersionUID = 2299659561613380545L;

    private String text;
    
    //Define colors and assign them some default values
    
    public Color 
        foreground = new Color(51,51,51),
        background = Color.WHITE,
        selectedForeground = new Color(51,51,51),
        selectedBackground = new Color(184, 207, 229);
    
    //CONSTRUCTORS
    
    /**
     * Constructor creating null-object
     */
    public ColoredString() {        
        text = null;
    }
    
    /**
     * Constructor creating text-containing object that uses default color scheme
     * @param t object representing the string. It is kept ONLY as a string representation.
     */
    public ColoredString(Object t) {
        text = t.toString();        
    }

    /**
     * Constructor creating text-containing object with suser-defined color scheme.
     * @param t object representing the text. It is kept ONLY as a string representation.
     * @param f foreground color.
     * @param b background color.
     * @param sf foreground color when the cell of JTable is selected.
     * @param sb background color when the cell of JTable is selected.
     */
    public ColoredString(Object t, Color f, Color b, Color sf, Color sb) {
        
        this(t);
                
        if(f != null) foreground = f;
        if(b != null) background = b;
        if(sf != null) selectedForeground = sf;
        if(sb != null) selectedBackground = sb;        
    }
    
    //GET METHODS
    
    public Color getBackground() {
        return background;
    }
    
    public Color getSelectedBackground() {
        return selectedBackground;
    }
                
    //SET METHODS
    
    /**
     * Method sets background scheme without changing the text and foreground scheme.
     * @param b new background color.
     * @param sb new background color when the cell of JTable is selected.
     */
    public void setBackgrounds(Color b, Color sb) {
        if(b != null) background = b;
        if(sb != null) selectedBackground = sb;        
    }
    
    /**
     * Method sets text without changing the color scheme.
     * @param txt string representing the new text.
     */
    protected void setText(String txt) {
        text  = txt;
    }

    //IMPLEMENTED METHODS OF Comparable
    
    /**
     * Method allows to compare this object with other objects that are instances
     * of String or ColoredString. Objects of all other types are not comparable
     * and thus equility is supposed.
     * @param arg0 is object to compare with.
     * @return a negative integer, zero, or a positive integer as this object is 
     * less than, equal to, or greater than the specified object.
     */
    public int compareTo(Object arg0) {

        if (arg0 instanceof ColoredString)
            return this.toString().compareTo(((ColoredString)arg0).toString());
        
        if (arg0 instanceof String)
            return this.toString().compareTo(arg0.toString());                            
            
        return 0;
    }
    
    //OWERWRITTEN METHODS OF Object
    
    /**
     * @return a string contained in this object.
     */
    public String toString() {
        return text;
    }
}

Это один из моих рендереров, обрабатывющий ColoredString для показа в JTable:
Код

import java.awt.Color;
import java.awt.Component;

import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
/**
 * Cell renderer providing a possibility to assign colors to single cells of JTable
 * and may be some other GUI objects. Do do it, the object containing in the cell
 * must be an instance of ColoredString. If the object is an instance of Color, an
 * empty colored cell is exposed. This is useful if a whole row or column is selected
 * but some selected cells should not contain any information.
 * @author Y
 * @version 2006-10-25
 */
public class CellRendererColorBkg extends DefaultTableCellRenderer  implements  TableCellRenderer {
    private static final long serialVersionUID = 9209775804802125978L;

    //Define colors and set default color scheme
    
    private static final Color 
        DEFAULT_FOREGROUND = new Color(51,51,51),
        DEFAULT_BACKGROUND = Color.WHITE,
        DEFAULT_SELECTED_BACKGROUND = new Color(184, 207, 229);
    
    public CellRendererColorBkg() {
        setOpaque(true);
    }

    public Component getTableCellRendererComponent(JTable table, Object value,
                         boolean isSelected, boolean hasFocus, int row, int column) {
           
        super.getTableCellRendererComponent(table, value,
                isSelected, hasFocus, row, column);
        
        Object cellContent = table.getModel().getValueAt(row, column);

        if(cellContent instanceof Color) {
            
            this.setBackground((Color)cellContent);
            
        } else if (cellContent instanceof ColoredString){
            
            this.setBackground(((ColoredString)cellContent).background);
            
          if (isSelected) { 
               this.setForeground(((ColoredString)cellContent).selectedForeground);
               this.setBackground(((ColoredString)cellContent).selectedBackground);
           } else {
                this.setForeground(((ColoredString)cellContent).foreground);
                this.setBackground(((ColoredString)cellContent).background);
           }          
            
            this.setText(((ColoredString)cellContent).toString());
            
        } else {
 
            this.setForeground(DEFAULT_FOREGROUND);

         if (isSelected) { 
                this.setBackground(DEFAULT_SELECTED_BACKGROUND);
            } else {
                 this.setBackground(DEFAULT_BACKGROUND);
            }          

            this.setText((String)cellContent);                  
        }
        
        return this;
    }
}


2008-01-10: По просбе трудящихся добавляю маленький запускаемый класс, демонстрирующий работу рендерера:

Код

import java.awt.Color;

import javax.swing.JFrame;
import javax.swing.JTable;

public class Test extends JFrame {
    
    public Test(){
        super();
        
        //Create table
        
        JTable table = new JTable(2,3);
        table.setDefaultRenderer(Object.class, new CellRendererColorBkg());
        
        //Fill table
        
        table.setValueAt(new ColoredString("String 00", Color.BLACK, Color.YELLOW, Color.GRAY, Color.GREEN), 0, 0);
        table.setValueAt(new ColoredString("String 01", Color.RED, Color.WHITE, Color.CYAN, Color.BLACK), 0, 1);
        table.setValueAt(new ColoredString("String 02", Color.BLUE, Color.GRAY, Color.RED, Color.GRAY), 0, 2);
        table.setValueAt(new ColoredString("String 10", Color.BLUE, Color.MAGENTA, Color.GREEN, Color.GRAY), 1, 0);
        table.setValueAt(new ColoredString("Default 11"), 1, 1);
        table.setValueAt(new ColoredString("String 12", Color.YELLOW, Color.BLACK, Color.RED, Color.YELLOW), 1, 2);        
        
        //Add table
        
        this.add(table);    
        
        //Conventional operations of the window
        
        this.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);        
        this.setSize(220, 80);
        this.setVisible(true);
    }

    public static void main(String[] args) {
        new Test();
    }
}


Это сообщение отредактировал(а) _Y_ - 10.1.2008, 13:56


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Lotrex
Дата 19.9.2007, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 9.2.2006
Где: Казань

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



Цитата(Lеstat @  9.1.2006,  23:35 Найти цитируемый пост)
Guest, не... свое оно лучше!!! русские доки будут =) мессаги на форуме по которым понятно что для чего
кстати, нету ни у кого маленького класса, который файлы с настройками читает
ну что-то типа


Без подсветки    
1:    
2:    
3:    
4:    
host=localhost    
port=8000    
login=user    
password=pass    

и тд


Есть у меня такой класс, тока он совсем не махонький (а точнее, это пакет, содержащий 4 класса)
Вот что делают эти классы:

AkPrefs - собственно, сам класс чтения/сохранения настроек;
FileDump - читает файл в память и хранит его в виде массива байт;
EscConv - преобразует строки, содержащие символы unicode, кириллицу или какие-либо спец. символы (символ новой строки и т.п),  в ascii-строки с заменой не-ascii-символов соответствующими esc-последовательностями. Выполняется так же обратное преобразование (esc-последовательности заменяются соотв. символами). В набор спец. символов можно дополнительно добавить любые символы, и они будут заменятся esc-последовательностями;
PrefsFormat - используется для записи/чтения настроек в соответствующем формате;
изменив его реализацию (но сохранив интерфейс), можно изменить формат хранения настроек.

тип: пакет
Версия 1.0 от 19.09.2007
Версия JDK: 1.5

Это сообщение отредактировал(а) Lotrex - 20.9.2007, 08:14

Присоединённый файл ( Кол-во скачиваний: 12 )
Присоединённый файл  formats10_19_09_2007.zip 7,32 Kb
PM MAIL ICQ   Вверх
_Y_
Дата 8.10.2007, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

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



Название: Простейший самозагружающийся TreeMap, удобный для использования в качестве примитивного словаря. 
Тип: класс
Язык: Java
Версия: 2007-10-08
Требуемые библиотеки: нет
Автор: Y
Код

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.TreeMap;

import javax.swing.JOptionPane;

/**
 * A treemap with data loadable from a file. Used as a dictonary and
 * translit-converter table.
 * The dictonary file has a tab-separated text format.
 * 
 * @version 2007-10-08
 * @author Y
 */
public class SelfLoadingTreeMap extends TreeMap<String, String> {
    private static final long serialVersionUID = 5598499932904345282L;
    
    private static final String FIELDSEPARATOR = "\t";
    
    protected String filePass;
    
    /**
     *Default constructor loading the table from a unicode file "UTF-16"
     * @throws IOException 
     */     
    public SelfLoadingTreeMap(String filePass) throws IOException {
        this(filePass, "UTF-16");
    }
    
    /**
     * Constructor allowing selection of the text file coding system
     * @param filePass
     * @param codingSystem
     * @throws IOException 
     */
    public SelfLoadingTreeMap(String filePass, String codingSystem) throws IOException {
        
        super();
        
        this.filePass = filePass;
        
        BufferedReader in
           = new BufferedReader(new InputStreamReader(
                   new FileInputStream(filePass), codingSystem));
        
        String str;
        String[] str2;
        
        while ((str = in.readLine()) != null) {
      
            str2 = str.split(FIELDSEPARATOR);
      
            if(str2.length == 1) {
                str2 = new String[2];
                str2[0] = str;
                str2[1] = null;
            }
      
            this.put(str2[0], str2[1]);
        }
     
        in.close();
    }    
}



--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Platon
Дата 27.3.2008, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

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



Предлагаю свой вариант работы с GridBagLayout

Код

package platon.gui.swing;

import javax.swing.*;
import java.awt.*;

public class GBCUtil {

    public int defaultGridX;

    public int defaultGridY;

    public int defaultGridWidth = 1;

    public int defaultGridHeight = 1;

    public double defaultWeightX;

    public double defaultWeightY;

    public int defaultAnchor = GBC.CENTER;

    public int defaultFill = GBC.NONE;

    public Insets defaultInsets = new Insets(2, 2, 2, 2);

    public int defaultPadX;

    public int defaultPadY;

    public GBCUtil() {}

    public GBCUtil(int defaultGridX, int defaultGridY, int defaultGridWidth, int defaultGridHeight, double defaultWeightX, double defaultWeightY, int defaultAnchor, int defaultFill, Insets defaultInsets, int defaultPadX, int defaultPadY) {
        this.defaultGridX = defaultGridX;
        this.defaultGridY = defaultGridY;
        this.defaultGridWidth = defaultGridWidth;
        this.defaultGridHeight = defaultGridHeight;
        this.defaultWeightX = defaultWeightX;
        this.defaultWeightY = defaultWeightY;
        this.defaultAnchor = defaultAnchor;
        this.defaultFill = defaultFill;
        this.defaultInsets = defaultInsets;
        this.defaultPadX = defaultPadX;
        this.defaultPadY = defaultPadY;
    }

    public GBC buildGBC() {
        return new GBC(defaultGridX, defaultGridY, defaultGridWidth, defaultGridHeight, defaultWeightX, defaultWeightY,
                defaultAnchor, defaultFill, defaultInsets, defaultPadX, defaultPadY);
    }

    public GBC buildGBC(int gridx, int gridy, int gridwidth, int gridheight, double weightx, double weighty, int anchor,
                        int fill, Insets insets, int ipadx, int ipady) {
        return new GBC(gridx, gridy, gridwidth, gridheight, weightx, weighty, anchor, fill, insets, ipadx, ipady);
    }

    public GBC buildGBC(int gridx, int gridy) {
        return new GBC(gridx, gridy, defaultGridWidth, defaultGridHeight, defaultWeightX, defaultWeightY,
                    defaultAnchor, defaultFill, defaultInsets, defaultPadX, defaultPadY);
    }

    public GBC buildGBC(int gridx, int gridy, int gridwidth, int gridheight) {
        return new GBC(gridx, gridy, gridwidth, gridheight, defaultWeightX, defaultWeightY,
                    defaultAnchor, defaultFill, defaultInsets, defaultPadX, defaultPadY);
    }

    public GBCUtil defaultGridX(int gridX) {
        defaultGridX = gridX;
        return this;
    }

    public GBCUtil defaultGridY(int gridY) {
        defaultGridY = gridY;
        return this;
    }

    public GBCUtil defaultGridWidth(int defaultGridWidth) {
        this.defaultGridWidth = defaultGridWidth;
        return this;
    }

    public GBCUtil defaultGridHeight(int defaultGridHeight) {
        this.defaultGridHeight = defaultGridHeight;
        return this;
    }

    public GBCUtil defaultWeightX(double defaultWeightX) {
        this.defaultWeightX = defaultWeightX;
        return this;
    }

    public GBCUtil defaultWeightY(double defaultWeightY) {
        this.defaultWeightY = defaultWeightY;
        return this;
    }


    public GBCUtil defaultAnchor(int defaultAnchor) {
        this.defaultAnchor = defaultAnchor;
        return this;
    }

    public GBCUtil defaultFill(int defaultFill) {
        this.defaultFill = defaultFill;
        return this;
    }

    public GBCUtil defaultInsets(Insets defaultInsets) {
        this.defaultInsets = defaultInsets;
        return this;
    }

    public GBCUtil defaultPadX(int defaultPadX) {
        this.defaultPadX = defaultPadX;
        return this;
    }

    public GBCUtil defaultPadY(int defaultPadY) {
        this.defaultPadY = defaultPadY;
        return this;
    }

    public static void main(String[] args) {
        JPanel panel = new JPanel(new GridBagLayout());
        GBCUtil util = new GBCUtil().defaultAnchor(GBC.WEST).defaultInsets(new Insets(2, 2, 2, 2));
        panel.add(new JLabel("Label1"), util.buildGBC(0, 0));
        panel.add(new JLabel("Label2"), util.buildGBC(0, 1));
        panel.add(new JLabel("Label3"), util.buildGBC(0, 2));
        panel.add(new JButton("..."), util.buildGBC(2, 2));
        util.defaultWeightX(1).defaultAnchor(GBC.CENTER).defaultFill(GBC.HORIZONTAL);
        panel.add(new JTextField(), util.buildGBC(1, 0, 2, 1));
        panel.add(new JTextField(), util.buildGBC(1, 1, 1, 1));
        panel.add(new JTextField(), util.buildGBC(1, 2, 1, 1));

        JFrame f = new JFrame();
        f.getContentPane().add(panel);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.pack();
        f.setLocationByPlatform(true);
        f.setVisible(true);
    }

}


Код

package platon.gui.swing;

import java.awt.*;

public class GBC extends GridBagConstraints {

    public GBC() {
    }

    public GBC(int gridx, int gridy, int gridwidth, int gridheight, double weightx, double weighty, int anchor, int fill, Insets insets, int ipadx, int ipady) {
        super(gridx, gridy, gridwidth, gridheight, weightx, weighty, anchor, fill, insets, ipadx, ipady);
    }


    public GBC(int gridx, int gridy) {
        this.gridx = gridx;
        this.gridy = gridy;
    }

    public GBC(int gridx, int gridy, int gridwidth, int gridheight) {
        this.gridx = gridx;
        this.gridy = gridy;
        this.gridwidth = gridwidth;
        this.gridheight = gridheight;
    }

    public GBC gridX(int gridx) {
        this.gridx = gridx;
        return this;
    }

    public GBC gridY(int gridy) {
        this.gridy = gridy;
        return this;
    }

    public GBC gridWidth(int gridwidth) {
        this.gridwidth = gridwidth;
        return this;
    }

    public GBC gridHeight(int gridheight) {
        this.gridheight = gridheight;
        return this;
    }

    public GBC weightX(double weightx) {
        this.weightx = weightx;
        return this;
    }

    public GBC weightY(double weighty) {
        this.weighty = weighty;
        return this;
    }

    public GBC anchor(int anchor) {
        this.anchor = anchor;
        return this;
    }

    public GBC fill(int fill) {
        this.fill = fill;
        return this;
    }

    public GBC ipadX(int ipadx) {
        this.ipadx = ipadx;
        return this;
    }

    public GBC ipadY(int ipady) {
        this.ipady = ipady;
        return this;
    }

    public GBC insets(Insets insets) {
        this.insets = insets;
        return this;
    }

}

Пример использования:
Код

JPanel panel = new JPanel(new GridBagLayout());
GBCUtil util = new GBCUtil().defaultAnchor(GBC.WEST).defaultInsets(new Insets(2, 2, 2, 2));
panel.add(new JLabel("Label1"), util.buildGBC(0, 0));
panel.add(new JLabel("Label2"), util.buildGBC(0, 1));
panel.add(new JLabel("Label3"), util.buildGBC(0, 2));
panel.add(new JButton("..."), util.buildGBC(2, 2));
util.defaultWeightX(1).defaultAnchor(GBC.CENTER).defaultFill(GBC.HORIZONTAL);
panel.add(new JTextField(), util.buildGBC(1, 0, 2, 1));
panel.add(new JTextField(), util.buildGBC(1, 1));
panel.add(new JTextField(), util.buildGBC(1, 2));

PM MAIL ICQ   Вверх
Hades
Дата 12.8.2008, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(sergejzr @  6.1.2006,  15:38 Найти цитируемый пост)

Код

// ...
while((cntchars = (ran.nextInt() % to))<from);
// ...


Оригинальное решение, но зачем использовать цикл, ведь этот процесс может и затянутся.
ИМХО, лучше так:
Код

cntchars = from + Math.abs(ran.nextInt()) % (to - from);



Это сообщение отредактировал(а) Hades - 12.8.2008, 18:51
PM MAIL   Вверх
Страницы: (6) Все « Первая ... 2 3 [4] 5 6 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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