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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> создание таблицы в AWT 
:(
    Опции темы
segmentation_fault
Дата 14.2.2006, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Доброго времени суток.
Вопрос у меня такой. Пишу GUI приложение на java 1.1 (соответственно на AWT). Сейчас пишу обычную табличку, (вроде JTable) и уже в самом начале траблы.
У меня есть класс рисующий одну клетку и еще один класс рисующий столбик клеток. Клетка рисуется более-менее но столбик прорисовывает только одну клетку (а не 10, как надо). Вот собственно код:


(Это класс который рисует столбик клеток)
Код

import java.awt.*;
import java.util.*;

public class TableColumn extends Panel {
    
    private Vector tableRow;
    private int rowSize;
    private final int cellHeight = 30;

    public TableColumn(int size) {
        //initialise the member variables
        rowSize = size;
        tableRow = new Vector(size);
        //TODO: create the row caption
        int i;
        for(i=0;i<size;i+=20) {tableRow.add(new TableCell(0, i, 30, 30, "sdf"));}
        

        setLayout(new BorderLayout());
        //cell = new TableCell(0, 0, 30, 30, "");
        //add(cell, BorderLayout.NORTH);  
        //setVisible(true);
    }
    
    public void paint(Graphics g) {
        Iterator iter = tableRow.iterator();
        
        while(iter.hasNext()) {
            TableCell tableCell = (TableCell)iter.next();
            tableCell.paint(g);
        }

        //cell.paint(g);
    }
    
    public Insets insets() {
        return new Insets(3,3,4,4);

    }
    
}

Проблема видимо в методе paint

а вот класс который рисует клетку:
Код

package newtable;

import java.awt.*;

public class TableCell extends Canvas {
//public class TableCell extends Panel {
    
    private int x;
    private int y;
    private int width;
    private int height;
    private String cellContents;
    
    
    public TableCell(int x, int y, int width, int height, String cellContents) {
        this.x = x;
        this.y = y;
        this.width = width;
        this.height = height;
        this.cellContents = cellContents;
    }
    
    public void paint(Graphics g) {
        g.setColor(Color.BLACK);
        //g.drawString(cellContents, x+2, y+2);
        
        //now draw the dashed border around the cell
        drawDashedLine(g, new Point(x, y), new Point((x+width), y), false);  //-----  top border
        drawDashedLine(g, new Point(x, y), new Point(x, (y+height)), true);  //|      left border
        drawDashedLine(g, new Point(x, (y+height)), new Point((x+width), (y+height)), false);  //____   bottom border
        drawDashedLine(g, new Point((x+width), y), new Point((x+width), (y+height)), true);  //     | right border
        //slight bug: for some reason the last line isn't drawn
        
        //g.drawRect(x, y, width, height);
    }
    
    //written since theres no such function in awt 1.1 
    //line can be either horizontal or vertical, 
    //determined by the third argument to the function
    //TODO: make the code nicer and more concise
    public void drawDashedLine(Graphics g, Point begin, Point end, boolean vertical) {
        final int dashLength = 5;  //change to get differrent dash length
        if(vertical) {
            int length = (int)(end.getY() - begin.getY());//length of line
            int i;
            int thexcoord = (int)begin.getX();
            /*
            for(i=(int)begin.getY();i<length;i+=(dashLength*2)) {
                if((i+dashLength) > end.getY()) {g.drawLine(thexcoord, i, thexcoord, i+dashLength);} 
                else {g.drawLine(thexcoord, i, thexcoord, (int)end.getY());} //if the distance to the end of the line is less then the dashLength
            }
            */
            for(i=(int)begin.getX();i<length;i+=dashLength) {                
                if(g.getColor() == Color.WHITE) g.setColor(Color.BLACK);
                else g.setColor(Color.WHITE);
                if((i+dashLength) > end.getY()) {g.drawLine(thexcoord, i, thexcoord, i+dashLength);} 
                else {g.drawLine(thexcoord, i, thexcoord, (int)end.getY());} //if the distance to the end of the line is less then the dashLength              
            }
        }
        else { //horizontal line
            int length = (int)(end.getX() - begin.getX());//length of line
            int i;
            int theycoord = (int)begin.getY();
            
            //below routine should work but for some reason doesn't
            /*
            for(i=(int)begin.getX();i<length;i+=(dashLength*2)) {
                if((i+dashLength) > end.getX()) {g.drawLine(i, theycoord,  i+dashLength, theycoord);} 
                else {g.drawLine(i, theycoord, (int)end.getX(), theycoord);} //if the distance to the end of the line is less then the dashLength
            */
            for(i=(int)begin.getX();i<length;i+=dashLength) {                
                if(g.getColor() == Color.WHITE) g.setColor(Color.BLACK);
                else g.setColor(Color.WHITE);
                if((i+dashLength) > end.getX()) {g.drawLine(i, theycoord,  i+dashLength, theycoord);} 
                else {g.drawLine(i, theycoord, (int)end.getX(), theycoord);} //if the distance to the end of the line is less then the dashLength                
            }
        }
    }
}



Буду благодарен за любые комментарии (только пожалуйста цензурные, я знаю что код не ахти, но с awt я раньше не работал).
P.S. Я знаю что изобретаю велосипед и что легче это было бы зделать на swing но мне сказали что надо писать именно на java 1.1.

Это сообщение отредактировал(а) segmentation_fault - 14.2.2006, 13:44
PM MAIL   Вверх
COVD
Дата 14.2.2006, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



поищите готовые реализации в интернете, они были для 1.1, и на их базе делайте свою
PM MAIL   Вверх
powerOn
Дата 14.2.2006, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Цитата

Вопрос у меня такой. Пишу GUI приложение на java 1.1 (соответственно на AWT)


Маньяк, однако...... smile, но...

Раз уж ты решил изобрести велосипед, то посмотри как такой же велик изобрели разработчики Swing. Скачай исходники их (они вроде на www.java.sun.com имеются) JTable, проследи мысли, которые там реализуюстя и дерзай!

P. S. Создание компонентов с нуля не такое уж и легкое занятие, даже кнопку написать не всегда просто, а кстати JTable считается самым сложным компонентом из всех Swing. Но другие написали, и ты сможешь! Все в твоих руках было бы желание. smile



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

PM MAIL   Вверх
LSD
Дата 14.2.2006, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 38
Всего: 538



Пока нет времени попробовать, но для JDK 1.1 есть версия SWING поставляемая в виде отдельных классов.
Скачать ее можно отсюда.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
COVD
Дата 15.2.2006, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(LSD @ 14.2.2006, 21:06 Найти цитируемый пост)
Скачать ее можно отсюда.


обалдеть, 11 мег ! Обычно требование использовать 1.1 возникало при создании апплетов, но сейчас таких браузеров мало осталось, в основном у корпоративных клиентов, у которых софтвер централизовано апгрейдится.

PM MAIL   Вверх
segmentation_fault
Дата 15.2.2006, 01:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



LSD, огромное спасибо! Это наверное самый лучший вариант.
Кстати решение писать ГУИ на 1.1 принимал не я, я не мазохист (во всяком случае не до такой степени smile ).
Спасибо всем остальным кто ответил.

PM MAIL   Вверх
Hroft
Дата 16.2.2006, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А вообще, по-моему, нужно поставить GridLayout(1,size) вместо Border, и устанавливать его перед add'ами.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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