Вот код:
| Код | package previewbar;
import java.awt.CardLayout; import java.awt.Color; import java.awt.Container; import java.awt.Dimension; 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 Main extends JPanel { 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 ArrayList<String> pfn = new ArrayList<String>(); private static ArrayList<String> pln = new ArrayList<String>(); private static ArrayList<String> c = new ArrayList<String>(); private static ArrayList<String> dop = new ArrayList<String>(); private static ArrayList<String> top = new ArrayList<String>(); private static ArrayList<String> mfp = new ArrayList<String>(); private static ArrayList<String> hfp = new ArrayList<String>(); private static ArrayList<String> cfp = new ArrayList<String>(); private static ArrayList<String> bfp = new ArrayList<String>(); 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 Font labelFont = new Font("Arial", Font.BOLD, 14);
//достаем данные из файла photosdb.txt и определяем поля private static void getData () { 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<9;i++) { TokensArr[i] = (String) st.nextElement(); System.out.println(TokensArr[i]); } pfn.add(new String (TokensArr[0])); pln.add(new String (TokensArr[1])); c.add(new String (TokensArr[2])); dop.add(new String (TokensArr[3])); top.add(new String (TokensArr[4])); mfp.add(new String (TokensArr[5])); hfp.add(new String (TokensArr[6])); cfp.add(new String (TokensArr[7])); bfp.add(new String (TokensArr[8])); System.out.println(pfn); System.out.println(pln); System.out.println(c); System.out.println(dop); System.out.println(top); System.out.println(mfp); System.out.println(hfp); System.out.println(cfp); System.out.println(bfp); } } catch (IOException ex) { ex.printStackTrace(); } } private class SmallPreviewBlock extends JPanel implements MouseListener {
private CardLayout cl; private int j; JPanel cards;
// создаем Блок превьюшки public SmallPreviewBlock (int i) {
//JPanel cards; j=i; java.net.URL mainURL = Main.class.getResource(mfp.get(i)); java.net.URL hoverURL = Main.class.getResource(hfp.get(i)); java.net.URL clickURL = Main.class.getResource(cfp.get(i));
//создаем иконки main = new ImageIcon(mainURL); hover = new ImageIcon(hoverURL); click = new ImageIcon(clickURL);
//создаем карты для колоды JPanel mainPanel = new JPanel(); Dimension d = new Dimension(97, 90); mainPanel.setMinimumSize(d); mainPanel.setBackground(color); JLabel mainLabel = new JLabel(main); mainLabel.setSize(97, 90); mainPanel.add(mainLabel); JPanel hoverPanel = new JPanel(); hoverPanel.setSize(97, 90); hoverPanel.setBackground(color); JLabel hoverLabel = new JLabel(hover); hoverLabel.setSize(97, 90); hoverPanel.add(hoverLabel); JPanel clickPanel = new JPanel(); clickPanel.setSize(97, 90); clickPanel.setBackground(color); JLabel clickLabel = new JLabel(click); clickLabel.setSize(97, 90); clickPanel.add(clickLabel);
//создаем панель "колоду" и добавляем в нее карты cards = new JPanel(new CardLayout()); cards.add(mainPanel, "MAIN"); cards.add(hoverPanel, "HOVER"); cards.add(clickPanel, "CLICK"); cards.addMouseListener(this);
CardLayout cl = (CardLayout)(cards.getLayout()); cl.show(cards, "MAIN"); //pane.add(cards); } // Обрабатываем события мыши public void mouseClicked(MouseEvent e) {
if (j==0) {leftArrowMath();} if (j==5) {rightArrowMath();}
}
public void mousePressed(MouseEvent e) {
cl.show(cards, "CLICK");
}
public void mouseReleased(MouseEvent e) {
cl.show(cards, "HOVER");
}
public void mouseEntered(MouseEvent e) {
cl.show(cards, "HOVER");
}
public void mouseExited(MouseEvent e) {
cl.show(cards, "MAIN");
}
} //создаем обсчет математики при нажатии на правую стрелку private static void rightArrowMath () { //определяем количество элементов в безразмерном массиве catalogue int i = pfn.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 = pfn.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(); }
/** Creates a new instance of Main*/ public void previewBar(Container pane) { //создаем панель-подложку JPanel previewBar = new JPanel(new FlowLayout()); previewBar.setSize(582, 90); previewBar.setBackground(color); //помещаем панели превьюшек на подложку previewBar.add(new SmallPreviewBlock(P0).cards); previewBar.add(new SmallPreviewBlock(p1).cards); previewBar.add(new SmallPreviewBlock(p2).cards); previewBar.add(new SmallPreviewBlock(p3).cards); previewBar.add(new SmallPreviewBlock(p4).cards); previewBar.add(new SmallPreviewBlock(P5).cards); pane.add(previewBar); } /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here getData(); JFrame frame = new JFrame(); Main block = new Main(); block.previewBar(frame.getContentPane()); frame.pack(); frame.setVisible(true); } }
|
Ошибка происходит в строках - 167 - 171 кода (реакция CardLayout на события мыши) |