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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ArrayList(), Проблемы в параметризации. 
V
    Опции темы
tolet
Дата 25.9.2006, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Добрый всем день!


Вопрос вот какой:

Использую в коде класса ArrayList(), но не могу понять что за параметр "Е" необходимо указывать при инициализации. Подскажите пожалуйста как корректно инициализировать данный массив?

Приведу сразу код класса, использующего данный массив:

Код

import java.io.*;
import java.util.*;

public class GetData {
    
    static ArrayList ar = new ArrayList();
    @SuppressWarning("unchecked");
    public GetData () {
        try {
            InputStreamReader f = new InputStreamReader (new FileInputStream ("photosdb.txt"),"Cp1251");
            BufferedReader in = new BufferedReader(f);
            String s;
            String TokensArr [] = new String [15];
            while ((s = in.readLine()) != null) {
                StringTokenizer st = new StringTokenizer(s,"\t");
                for (int i=0;i<=st.countTokens()+1;i++) {
                    TokensArr[i] = (String) st.nextElement();
                }
                ar.add(new DefineData (TokensArr[0],TokensArr[1],TokensArr[2],TokensArr[3],TokensArr[4],TokensArr[5],TokensArr[6],TokensArr[7],TokensArr[8],TokensArr[9],TokensArr[10],TokensArr[11],TokensArr[12],TokensArr[13],TokensArr[14]));
                System.out.println("Количество строк в безразмерном массиве ar = " + ar.size());
                System.out.println(s);
            }
        }
        catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}
 
PM MAIL WWW ICQ   Вверх
Grelloo
Дата 25.9.2006, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Зайди на ссылку http://vingrad.ru/JAVA-ART-001433 и прочитай пункт 1. Думаю это как раз то, что тебе нужно
PM MAIL ICQ   Вверх
tolet
Дата 25.9.2006, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Grelloo

Спасибо за ссылочку. Подправил. Получилось следующее:

Код

import java.io.*;
import java.util.*;

public class GetData {
    
    static ArrayList<String> ar = new ArrayList<String> ();
    public GetData () {
        try {
            InputStreamReader f = new InputStreamReader (new FileInputStream ("photosdb.txt"),"Cp1251");
            BufferedReader in = new BufferedReader(f);
            String s;
            String TokensArr [] = new String [15];
            while ((s = in.readLine()) != null) {
                StringTokenizer st = new StringTokenizer(s,"\t");
                for (int i=0;i<=st.countTokens()+1;i++) {
                    TokensArr[i] = (String) st.nextElement();
                }
                ar.add(new DefineData (TokensArr[0],TokensArr[1],TokensArr[2],TokensArr[3],TokensArr[4],TokensArr[5],TokensArr[6],TokensArr[7],TokensArr[8],TokensArr[9],TokensArr[10],TokensArr[11],TokensArr[12],TokensArr[13],TokensArr[14]));
                System.out.println("Количество строк в безразмерном массиве ar = " + ar.size());
                System.out.println(s);
            }
        }
        catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}


А в консоли пишет следующее: 

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    The method add(String) in the type ArrayList<String> is not applicable for the arguments (DefineData)

    at GetData.<init>(GetData.java:18)
    at PRE.main(PRE.java:12)
Я к сожалению, в силу своего малого опыта программирования, не могу пока разобраться в ступоре. Может кто еще что-нибудь подскажет?

Заранее благодарен за ответы.
PM MAIL WWW ICQ   Вверх
powerOn
Дата 25.9.2006, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Твой объект класса ArrayList<String> может хранить только String. Это и обозначается с помощью <String>. Ты же в 18 строке пытаешься добавить в него объект DefineData (это кстати что за класс?). Поменяй ArrayList<String> на ArrayList<DefineData>.


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

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


Шустрый
*


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

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



powerOn



Вот класс DrfineData

Код

public class DefineData {
    
    private String PhotographerFirstName, PhotographerMiddleName, PhotographerLastName;
    private String Code, ReleaseDate, DateOfPhoto, TitleOfPhoto;
    private String MainFileName, HoverFileName, ClickFileName, BigFileName;
    private String MainFilePath, HoverFilePath, ClickFilePath, BigFilePath;
    
    public DefineData (String PFN, String PMN, String PLN, String C, String RD, String DOP, String TOP, String MFN, String HFN, String CFN, String BFN,String MFP, String HFP, String CFP, String BFP) {
        PhotographerFirstName = PFN;
        PhotographerMiddleName = PMN;
        PhotographerLastName = PLN;
        Code = C;
        ReleaseDate = RD;
        DateOfPhoto = DOP;
        TitleOfPhoto = TOP;
        MainFileName = MFN;
        HoverFileName = HFN;
        ClickFileName = CFN;
        BigFileName = BFN;
        MainFilePath = MFP;
        HoverFilePath = HFP;
        ClickFilePath = CFP;
        BigFilePath = BFP;
    }
    public String getPhotographerFirstName () {
        return PhotographerFirstName;
    }
    public String getPhotographerMiddleName () {
        return PhotographerMiddleName;
    }
    public String getPhotographerLastName () {
        return PhotographerLastName;
    }
    public String getCode () {
        return Code;
    }
    public String getReleaseDate () {
        return ReleaseDate;
    }
    public String getDateOfPhoto () {
        return DateOfPhoto;
    }
    public String getTitleOfPhoto () {
        return TitleOfPhoto;
    }
    public String getMainFileName () {
        return MainFileName;
    }
    public String getHoverFileName () {
        return HoverFileName;
    }
    public String getClickFileName () {
        return ClickFileName;
    }
    public String getBigFileName () {
        return BigFileName;
    }
    public String getMainFilePath () {
        return MainFilePath;
    }
    public String getHoverFilePath() {
        return HoverFilePath;
    }
    public String getClickFilePath () {
        return ClickFilePath;
    }
    public String getBigFilePath () {
        return BigFilePath;
    }
}


Сейчас попробую сделать так как ты посоветовал.

Добавлено @ 17:42 
Все - заработало !

Всем огромное спасибо за участие.
PM MAIL WWW ICQ   Вверх
powerOn
Дата 25.9.2006, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



пожалуйста. smile


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

PM MAIL   Вверх
tolet
Дата 8.10.2006, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Добрый день.

Снова нужна помощь с тем же самым вопросом. Я немного переделал тот код, который помещал в начале поста, и у меня опять возникла проблема с ArrayList/

Код


private static ArrayList<String[]> catalogue = new ArrayList<String[]>();

private void defineData () {
        
        try {
            InputStreamReader f = new InputStreamReader (new FileInputStream ("photosdb.txt"),"Cp1251");
            BufferedReader in = new BufferedReader(f);
            String s;
            String TokensArr [] = new String [9];
            while ((s = in.readLine()) != null) {
                   
                StringTokenizer st = new StringTokenizer(s,"\t");
                for (int i=0;i<=st.countTokens()+1;i++) {
                    TokensArr[i] = (String) st.nextElement();
                }
                catalogue.add(new String[] = {TokensArr[0], TokensArr[1], TokensArr[2], TokensArr[3], TokensArr[4], TokensArr[5], TokensArr[6], TokensArr[7], TokensArr[8]});
                    
            }
    }
    catch (IOException ex) {
        ex.printStackTrace();
    }
  }



помогите пожалуйста разобраться что к чему!!!
PM MAIL WWW ICQ   Вверх
powerOn
Дата 8.10.2006, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Цитата(tolet @  8.10.2006,  20:39 Найти цитируемый пост)
catalogue.add(new String[] = {TokensArr[0], TokensArr[1], TokensArr[2], TokensArr[3], TokensArr[4], TokensArr[5], TokensArr[6], TokensArr[7], TokensArr[8]});


попробуйте убрать знак =

Код

catalogue.add(new String[] {TokensArr[0], TokensArr[1], TokensArr[2], TokensArr[3], TokensArr[4], TokensArr[5], TokensArr[6], TokensArr[7], TokensArr[8]});




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

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


Шустрый
*


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

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



Спасибо - помогло

А есть где-нибудь про ArrayList на русском почитать? (только желательно, чтобы материал был для начинающих)

Спасибо
PM MAIL WWW ICQ   Вверх
powerOn
Дата 8.10.2006, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



У нас в FAQ есть некоторые материалы по коллекциям.


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

PM MAIL   Вверх
NotGonnaGetUs
Дата 9.10.2006, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Понимаю, что прозвучавшие вопросы относятся ко дням минувшим, но всё-таки...

Глядя на DefineData не удержался.
Почему не сделать по простому?

Код

public class DefineData {

    private String ReleaseDate;
    private String Code;

    private Photo photo;

    public DefineData(String PFN, String PMN, String PLN, String C, String RD, String DOP, String TOP, String MFN, String HFN, String CFN, String BFN, String MFP, String HFP, String CFP, String BFP) {

        Code = C;
        ReleaseDate = RD;

        FileInfo main = new FileInfo(MFN, MFP);
        FileInfo hover = new FileInfo(HFN, HFP);
        FileInfo click = new FileInfo(CFN, CFP);
        FileInfo big = new FileInfo(BFN, BFP);
        Views possibleViews = new Views(main, hover, click, big);

        Photographer photographer = new Photographer(PFN, PMN, PLN);

        photo = new Photo(DOP, TOP, possibleViews, photographer);
    }

    public String getCode() {
        return Code;
    }

    public String getReleaseDate() {
        return ReleaseDate;
    }

    public Photo getPhoto() {
        return photo;
    }
}

class Photographer {
    private String firstName;
    private String middleName;
    private String lastName;

    public Photographer(String firstName, String middleName, String lastName) {
        this.firstName = firstName;
        this.middleName = middleName;
        this.lastName = lastName;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getMiddleName() {
        return middleName;
    }

    public String getLastName() {
        return lastName;
    }
}

class FileInfo {
    private String name;
    private String path;

    public FileInfo(String name, String path) {
        this.name = name;
        this.path = path;
    }

    public String getName() {
        return name;
    }

    public String getPath() {
        return path;
    }
}

class Views {
    private FileInfo main;
    private FileInfo hover;
    private FileInfo click;
    private FileInfo big;


    public Views(FileInfo main, FileInfo hover, FileInfo click, FileInfo big) {
        this.main = main;
        this.hover = hover;
        this.click = click;
        this.big = big;
    }

    public FileInfo getMain() {
        return main;
    }

    public FileInfo getHover() {
        return hover;
    }

    public FileInfo getClick() {
        return click;
    }

    public FileInfo getBig() {
        return big;
    }
}

class Photo {
    private String date;
    private String title;

    private Views possibleViews;
    private Photographer photographer;


    public Photo(String date, String title, Views possibleViews, Photographer photographer) {
        this.date = date;
        this.title = title;
        this.possibleViews = possibleViews;
        this.photographer = photographer;
    }

    public String getDate() {
        return date;
    }

    public String getTitle() {
        return title;
    }

    public Views getPossibleViews() {
        return possibleViews;
    }

    public Photographer getPhotographer() {
        return photographer;
    }
}


Разве так не проще? 

Отбросив пустые строки, получится всего в полтора раза больше, чем в исходном примере, 
но при этом не нужно изобретать дикие названия или вычленять какая строка, что значит. Кроме того, все эти объекты можно повторно использовать в других контекстах.
Параметры  (MFN, MFP);(HFN, HFP);(CFN, CFP);(BFN, BFP);(PFN, PMN, PLN); вообще не должны были дойти до конструктора.
Сама по себе нужда в DefineData сомнительна. Photo вполне может содержать всю необходимую информацию. 
PM MAIL   Вверх
tolet
Дата 9.10.2006, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я тут плотненько занимался этим фремом и вот что у меня сейчас имеется:

Код

package catalogue;

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.StringTokenizer;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

/**
 *
 * @author Vlad
 */
public class Catalogue extends JPanel {
    
    //определяем поля класса
    private static ArrayList<String[]> catalogue = new ArrayList<String[]>();
    private static String[] photosdb0;
    private static String[] photosdb1;
    private static String[] photosdb2;
    private static String[] photosdb3;
    private static String[] photosdb4;
    private static String[] photosdb5;
    private final static int P0=0;
    private final static int P5=1;
    private static int p1=2, p2=3, p3=4, p4=5;
    private static String[] pfn = new String[6];
    private static String[] pln = new String[6];
    private static String[] c = new String[6];
    private static String[] dop = new String[6];
    private static String[] top = new String[6];
    private static String[] mfp = new String[6];
    private static String[] hfp = new String[6];
    private static String[] cfp = new String[6];
    private static String[] bfp = new String[6];
    private static URL mainURL, hoverURL, clickURL, bigURL;
    private static ImageIcon main, hover, click, big;
    private static Color color = new Color(153, 102, 102);
    private static CardLayout cl;
    private static Font labelFont = new Font("Verdana", Font.BOLD, 14);

    //достаем данные из файла photosdb.txt и определяем поля
    private static void defineData () {
        
        try {
            InputStreamReader f = new InputStreamReader (new FileInputStream ("D:\\Docum\\PreviewBar\\Catalogue\\build\\classes\\catalogue\\photosdb.txt"),"Cp1251");
            BufferedReader in = new BufferedReader(f);
            String s;
            String TokensArr [] = new String [9];
            while ((s = in.readLine()) != null) {
                   
                StringTokenizer st = new StringTokenizer(s,"\t");
                for (int i=0;i<=st.countTokens()+1;i++) {
                    TokensArr[i] = (String) st.nextElement();
                }
                catalogue.add(new String[] {TokensArr[0], TokensArr[1], TokensArr[2], TokensArr[3], TokensArr[4], TokensArr[5], TokensArr[6], TokensArr[7], TokensArr[8]});
                    
            }
    }
    catch (IOException ex) {
        ex.printStackTrace();
    }
        
        //подготовка данных для маленьких превьюшек (перекладываем данные из безразмерного массива-каталога в массивы текущих превьюшек
        photosdb0 = ((String[]) catalogue.get(P0));
        photosdb1 = ((String[]) catalogue.get(p1));
        photosdb2 = ((String[]) catalogue.get(p2));
        photosdb3 = ((String[]) catalogue.get(p3));
        photosdb4 = ((String[]) catalogue.get(p4));
        photosdb5 = ((String[]) catalogue.get(P5));
        
        //создаем массивы полей: имя фотографа
        pfn[0] = photosdb0[0];
        pfn[1] = photosdb1[0];
        pfn[2] = photosdb2[0];
        pfn[3] = photosdb3[0];
        pfn[4] = photosdb4[0];
        pfn[5] = photosdb5[0];
        
        //создаем массивы полей: фамилия фотографа
        pln[0] = photosdb0[1];
        pln[1] = photosdb1[1];
        pln[2] = photosdb2[1];
        pln[3] = photosdb3[1];
        pln[4] = photosdb4[1];
        pln[5] = photosdb5[1];
        
        //создаем массивы полей: код фотографии
        c[0] = photosdb0[2];
        c[1] = photosdb1[2];
        c[2] = photosdb2[2];
        c[3] = photosdb3[2];
        c[4] = photosdb4[2];
        c[5] = photosdb5[2];
        
        //создаем массивы полей: дата фотографии
        dop[0] = photosdb0[3];
        dop[1] = photosdb1[3];
        dop[2] = photosdb2[3];
        dop[3] = photosdb3[3];
        dop[4] = photosdb4[3];
        dop[5] = photosdb5[3];
        
        //создаем массивы полей: название фотографии
        top[0] = photosdb0[4];
        top[1] = photosdb1[4];
        top[2] = photosdb2[4];
        top[3] = photosdb3[4];
        top[4] = photosdb4[4];
        top[5] = photosdb5[4];
        
        //создаем массивы полей: путь до маленькой превьюшки "main"
        mfp[0] = photosdb0[5];
        mfp[1] = photosdb1[5];
        mfp[2] = photosdb2[5];
        mfp[3] = photosdb3[5];
        mfp[4] = photosdb4[5];
        mfp[5] = photosdb5[5];
        
        //создаем массивы полей: путь до маленькой превьюшки "hover"
        hfp[0] = photosdb0[6];
        hfp[1] = photosdb1[6];
        hfp[2] = photosdb2[6];
        hfp[3] = photosdb3[6];
        hfp[4] = photosdb4[6];
        hfp[5] = photosdb5[6];
        
        //создаем массивы полей: путь до маленькой превьюшки "click"
        cfp[0] = photosdb0[7];
        cfp[1] = photosdb1[7];
        cfp[2] = photosdb2[7];
        cfp[3] = photosdb3[7];
        cfp[4] = photosdb4[7];
        cfp[5] = photosdb5[7];
        
        //создаем массивы полей: путь до маленькой превьюшки "big"
        bfp[0] = photosdb0[8];
        bfp[1] = photosdb1[8];
        bfp[2] = photosdb2[8];
        bfp[3] = photosdb3[8];
        bfp[4] = photosdb4[8];
        bfp[5] = photosdb5[8];
        
       // previewBar().repaint();
        
    }
    
    //создаем врутренний клас для создания блока превьюшек
    private static class SmallPreviewBlock extends JPanel implements MouseListener {

        private int j;

        // создаем Блок превьюшки
        public SmallPreviewBlock (int i) {

            j=i;
            
            java.net.URL mainURL = Catalogue.class.getResource(mfp[i]);
            java.net.URL hoverURL = Catalogue.class.getResource(hfp[i]);
            java.net.URL clickURL = Catalogue.class.getResource(cfp[i]);

            //создаем иконки
            main = new ImageIcon(mainURL);
            hover = new ImageIcon(hoverURL);
            click = new ImageIcon(clickURL);

            //создаем карты для колоды
            JPanel mainPanel = new JPanel();
            mainPanel.setSize(97, 90);
            mainPanel.setBackground(color);
            mainPanel.add(new JLabel(main));
            JPanel hoverPanel = new JPanel();
            hoverPanel.setSize(97, 90);
            hoverPanel.setBackground(color);
            hoverPanel.add(new JLabel(hover));
            JPanel clickPanel = new JPanel();
            clickPanel.setSize(97, 90);
            clickPanel.setBackground(color);
            clickPanel.add(new JLabel(click));

            //создаем панель "колоду" и добавляем в нее карты
            JPanel cards = new JPanel(new CardLayout());
            cards.add(mainPanel, "MAIN");
            cards.add(hoverPanel, "HOVER");
            cards.add(clickPanel, "CLICK");
            cards.addMouseListener(this);

            cl = (CardLayout)(cards.getLayout());
            cl.show(cards, "MAIN");
       
        }
        
            // Обрабатываем события мыши
        public void mouseClicked(MouseEvent e) {

            if (j==0) {leftArrowMath();}
            if (j==1) {bigPhotoPanel(j).repaint();}
            if (j==2) {bigPhotoPanel(j).repaint();}
            if (j==3) {bigPhotoPanel(j).repaint();}
            if (j==4) {bigPhotoPanel(j).repaint();}
            if (j==5) {rightArrowMath();}

        }

        public void mousePressed(MouseEvent e) {

            cl.show(this, "CLICK");

        }

        public void mouseReleased(MouseEvent e) {

            cl.show(this, "HOVER");

        }

        public void mouseEntered(MouseEvent e) {

            cl.show(this, "HOVER");

        }

        public void mouseExited(MouseEvent e) {

            cl.show(this, "MAIN");

        }

    }
    
    // создаем полосу превьюшек
    private static JPanel previewBar () {
        
        //создаем панель-подложку
        JPanel previewBar = new JPanel(new FlowLayout());
        previewBar.setSize(582, 90);
        previewBar.setBackground(color);
        
        //помещаем панели превьюшек на подложку
        previewBar.add(new SmallPreviewBlock(P0));
        previewBar.add(new SmallPreviewBlock(p1));
        previewBar.add(new SmallPreviewBlock(p2));
        previewBar.add(new SmallPreviewBlock(p3));
        previewBar.add(new SmallPreviewBlock(p4));
        previewBar.add(new SmallPreviewBlock(P5));
        
        return previewBar;
        
    }
    
    //создаем панель с информацией о фото
    private static JPanel photoInfo (int i) {
        
        //соеденяем имя и фамилию фотографу в одну строку
        String s1 = new String(":: " + pfn[i] + " " + pln[i] + " ::");
        //создаем строку с названием фотографии
        String s2 = new String(":: " + top[i] + " ::");
        //создаем строку с датой фотографии
        String s3 = new String(":: " + dop[i] + " ::");

        //создаем панель-подложку
        JPanel photoInfo = new JPanel(new BorderLayout());
        photoInfo.setSize(582, 100);
        photoInfo.setBackground(color);
                
        //создаем лэйблы с надписями
        JLabel photographerName = new JLabel(s1);
        photographerName.setFont(labelFont);
        photographerName.setBackground(color);
        photographerName.setForeground(Color.WHITE);
        photographerName.setHorizontalAlignment(0);
        JLabel titleOfPhoto = new JLabel(s2);
        titleOfPhoto.setFont(labelFont);
        titleOfPhoto.setBackground(color);
        titleOfPhoto.setForeground(Color.WHITE);
        titleOfPhoto.setHorizontalAlignment(0);
        JLabel dateOfPhoto = new JLabel(s3);
        dateOfPhoto.setFont(labelFont);
        dateOfPhoto.setBackground(color);
        dateOfPhoto.setForeground(Color.WHITE);
        dateOfPhoto.setHorizontalAlignment(0);
        
        //размещаем лэйблы на панели
        photoInfo.add(photographerName, BorderLayout.NORTH);
        photoInfo.add(titleOfPhoto, BorderLayout.CENTER);
        photoInfo.add(dateOfPhoto, BorderLayout.SOUTH);
        
        return photoInfo;
                
    }
    
    //создаем панель с большой фото без полосы превьюшек
    private static JPanel bigPhotoPanel (int i) {
        
        //загружаем большую картинку
        java.net.URL bigURL = Catalogue.class.getResource(bfp[i]);
        big = new ImageIcon(bigURL);
        
        //создаем панель-подложку
        JPanel bigPhotoPanel = new JPanel(new BorderLayout());
        bigPhotoPanel.setSize(582, 510);
        bigPhotoPanel.setBackground(color);
        
        //создаем лэйбл с кодом фотографии
        JLabel code = new JLabel(c[i]);
        code.setSize(582, 35);
        code.setFont(labelFont);
        code.setBackground(color);
        code.setForeground(Color.WHITE);
        code.setHorizontalAlignment(0);
        code.setVerticalAlignment(0);
        
        //создаем лэйбл с большой фотографией
        JLabel bigPhoto = new JLabel(big);
        bigPhoto.setSize(582, 375);
        bigPhoto.setBackground(color);
        bigPhoto.setHorizontalAlignment(0);
        bigPhoto.setVerticalAlignment(0);
        
        //размещаем все компоненты на панель
        bigPhotoPanel.add(code, BorderLayout.NORTH);
        bigPhotoPanel.add(bigPhoto, BorderLayout.CENTER);
        bigPhotoPanel.add(photoInfo(i), BorderLayout.SOUTH);
        
        return bigPhotoPanel;
        
    }
    
    //создаем обсчет математики при нажатии на правую стрелку
    private static void rightArrowMath () {
        
        //определяем количество элементов в безразмерном массиве catalogue
        int i = catalogue.size();
        
        //определяем новые значения отображаемых картинок
        if (p1<(i--)) {p1++;} else {p1=2;}
        if (p2<(i--)) {p2++;} else {p2=2;}
        if (p3<(i--)) {p3++;} else {p3=2;}
        if (p4<(i--)) {p4++;} else {p4=2;}
        
        //перерисовываем полосу превьюшек
        previewBar().repaint();
        
    }
    
    //создаем обсчет математики при нажатии на левую стрелку
    private static void leftArrowMath () {
        
        //определяем количество элементов в безразмерном массиве catalogue
        int i = catalogue.size();
        
        //определяем новые значения отображаемых картинок
        if (p1>2) {p1--;} else {p1=i--;}
        if (p1>2) {p2--;} else {p2=i--;}
        if (p1>2) {p3--;} else {p3=i--;}
        if (p1>2) {p4--;} else {p4=i--;}
        
        //перерисовываем полосу превьюшек
        previewBar().repaint();
        
    }
    
    /** Компануем и отображаем через pane все содержимое апплета */
    public static JPanel catalogue(Container pane) {
        
        defineData();
        
        //создаем панель-подложку для двух сборных панелей (панели первьюшек и панели с большой фоткой)
        JPanel assambledPanel = new JPanel(new BorderLayout());
        
        //добавляем на панель-подложку панель превьюшек и панель с большой фоткой
        assambledPanel.add(bigPhotoPanel(0), BorderLayout.CENTER);
        assambledPanel.add(previewBar(), BorderLayout.SOUTH);
        
        //добавляем панель подложку в блок содержимого
        pane.add(assambledPanel);
        
        return assambledPanel;
        
    }
    
    public static void main (String[] args) {
        
        //if (catalogue != null) {
            JFrame frame = new JFrame("Фото превью");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            catalogue(frame.getContentPane());

            frame.pack();
            frame.setVisible(true);

       // } else {
            
        //    defineData();
            
       // }
        
    }


}


но есть у меня сомнения, что вот в этом месте  у меня все правильно сделано. Взгляните, плиз, может подскажете чего толкового новичку smile
Цитата


        //подготовка данных для маленьких превьюшек (перекладываем данные из безразмерного массива-каталога в массивы текущих превьюшек
        photosdb0 = ((String[]) catalogue.get(P0));
        photosdb1 = ((String[]) catalogue.get(p1));
        photosdb2 = ((String[]) catalogue.get(p2));
        photosdb3 = ((String[]) catalogue.get(p3));
        photosdb4 = ((String[]) catalogue.get(p4));
        photosdb5 = ((String[]) catalogue.get(P5));
        



Добавлю только одно - программа не запускается в виду того, что файлы с картинками найти (или открыть) не может
PM MAIL WWW ICQ   Вверх
y3u
Дата 9.10.2006, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



а нельзя было сделать нормальный объект, который будет заполняться при парсинге, а не складывать все в массивы? Спорим, что через неделю сам забудешь, что в этом классе где лежит и для чего... Это все хозяйство переделать бы на нормальные объекты и коллекции


--------------------
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах
PM MAIL   Вверх
tolet
Дата 9.10.2006, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



y3u,  да я бы с удовольствием переделал, вот только знаний еще маловато, чтобы все правильно и как положено делать.
PM MAIL WWW ICQ   Вверх
NotGonnaGetUs
Дата 9.10.2006, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я правильно понимаю, что в  photosdb.txt лежит ровно 6 описаний картинок? smile

Цитата(tolet @  9.10.2006,  17:29 Найти цитируемый пост)
y3u,  да я бы с удовольствием переделал, вот только знаний еще маловато, чтобы все правильно и как положено делать. 


1. Не дублировать код (pfn[1] = photosdb1[0]; и pfn[2] = photosdb2[0];  -  дублирование).
2. Минимизировать количество "договорной" информации, делать её очевидной (н-р знание о том, что pfn[2] и pln[2] описывают картинку номер 2, а не две не зависимых величины - не очень очевидно. всё было бы очевидно, если pfn и pln были полями одного класса и имели ясные имена)
3. Минимизировать области видимости переменных/данных (никаких static переменных, можно не использовать переменную - нужно не использовать).

Достаточно следовать только этим простым правилам, чтобы качество кода радикально улучшилось.

Времени на рефакторинг сейчас нет.
Попробуй сам:
1. Сделать переменные 
 private static String[] photosdb0;
    private static String[] photosdb1;
    private static String[] photosdb2;
    private static String[] photosdb3;
    private static String[] photosdb4;
    private static String[] photosdb5;
и private static ImageIcon main, hover, click, big;
локальными для тех методов, где они используются.

2. Убери дублирование в методе defineData().
Вместо 
photosdb0 = catalogue.get(P0);
photosdb1 = catalogue.get(P1);
...
pfn[0] = photosdb0[0];
pfn[1] = photosdb1[0];
...
pln[0] = photosdb0[1];
pln[1] = photosdb1[1];
...
должно стать: 
for(int i=0; i< catalogue.size(); i++) {
      String[] photosdb = catalogue.get(i);
      pfn[i] = photosdb[0]
      pln[i] = photosdb0[1];
      ...
}

3. Замени массивы pfn, pln, etc на один массив из объектов с полями pfn, pln (помести их в класс data, например) .
(затем этот класс можно привести к чему-то похожему на код из моего первого сообщения) 

4. После этого нужно знаяться всеми этими p0,p5.
Нужно явно обозначить абстрацию:
Существует N (=catalogue.size()?) картинок. Из них только M(=4?) (начиная с индекса K) находятся в preview буфере.
Допустимые операции: 
сдвинуть буфер в лево, 
сдвинуть буфер в право,
определить текущее значение К.

Создаёшь такой объектик. Заменяешь на им p0....p5. 

5. ...  
(Предела совершенству не существует smile)



 

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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