2013-03-11 4 views
0

을 통해 완전히 순환하는 GUI를 얻으려고 시도하지만 다음 번 버튼 [3]을 클릭하면 오류가 발생합니다. 내가해야할 일은 다음 버튼을 클릭 할 때 모든 것을 순환시키는 것입니다. 배열의 마지막 반복에 도달하면 처음으로 돌아갈 필요가 있습니다. 또한 배열은 사전 순으로 알파벳순으로 정렬되어 있으므로 일단 순환하면 제목 [3]으로 시작해야합니다.처음부터 다시 시작하는 데이터를 통해 GUI를 순환 시키려고 시도합니다

next.addActionListener(this); 

이, 차례로, 증분 : 모든 도움

import java.awt.FlowLayout; 
import java.awt.GridLayout; 
import java.awt.event.*; 
import java.util.Arrays; 
import javax.swing.*; 
import java.awt.*; 



public class GUI extends JFrame implements ActionListener { 
    JButton next; 
    JButton previous; 
    JButton first; 
    JButton last; 

    private JLabel itmNum = new JLabel("Item Number: ", SwingConstants.RIGHT); 
    private JTextField itemNumber; 
    private JLabel proNm = new JLabel ("Product Name: ", SwingConstants.RIGHT); 
    private JTextField prodName; 
    private JLabel yr = new JLabel("Year Made: ", SwingConstants.RIGHT); 
    private JTextField year; 
    private JLabel unNum = new JLabel("Unit Number: ", SwingConstants.RIGHT); 
    private JTextField unitNumber; 
    private JLabel prodPrice = new JLabel("Product Price: ", SwingConstants.RIGHT); 
    private JTextField price; 
    private JLabel restkFee = new JLabel("Restocking Fee", SwingConstants.RIGHT); 
    private JTextField rsFee; 
    private JLabel prodInValue = new JLabel("Product Inventory Value", SwingConstants.RIGHT); 
    private JTextField prodValue; 
    private JLabel totalValue = new JLabel("Total Value of All Products", SwingConstants.RIGHT); 
    private JTextField tValue; 
    private double toValue; 
    Movies[] titles = new Movies[9]; 
    int nb = 0; 

    public GUI() 
    { 

     super ("Inventory Program Part 5"); 
     setSize(800,800); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLookAndFeel(); 




     first = new JButton("First"); 
     previous = new JButton("Previous"); 
     next = new JButton("Next"); 
     last = new JButton("Last"); 
     first.addActionListener(this); 
     previous.addActionListener(this); 
     next.addActionListener(this); 
     last.addActionListener(this); 




     //Movies[] titles = new Movies[9]; 

     titles [0] = new Movies(10001, "King Arthur", 25 , 9.99, 2004, .05); 

     titles [1] = new Movies(10002,"Tron", 25, 7.99, 1982, .05); 

     titles [2] = new Movies(10003, "Tron: Legacy",25,24.99,2010,.05); 

     titles [3] = new Movies(10004,"Braveheart", 25,2.50,1995,.05); 

     titles [4] = new Movies(10005,"Gladiator",25,2.50,2000,.05); 

     titles [5] = new Movies(10006,"CaddyShack SE",25,19.99,1980,.05); 

     titles [6] = new Movies (10007,"Hackers",25,12.50,1995,.05); 

     titles [7] = new Movies (10008,"Die Hard Trilogy",25,19.99,1988,.05); 

     titles [8] = new Movies (10009,"Terminator",25,4.99,1984,.05); 

     Arrays.sort (titles, DVD.prodNameComparator); 






         itemNumber = new JTextField(Double.toString(titles[3].getitemNum())); 
         prodName = new JTextField(titles[3].getprodName()); 
         year= new JTextField(Integer.toString(titles[3].getYear())); 
         unitNumber= new JTextField(Integer.toString(titles[3].getunitNum())); 
         price= new JTextField(Float.toString(titles[3].getprice())); 
         rsFee= new JTextField(Double.toString(titles[3].getRestkFee())); 
         prodValue= new JTextField(Double.toString(titles[3].getprodValue())); 
         tValue= new JTextField("2636"); 
         nb=0; 
         next.addActionListener(this); 



     setLayout(new GridLayout(8,4)); 
     add(itmNum); 
     add(itemNumber); 
     add(proNm); 
     add(prodName); 
     add(yr); 
     add(year); 
     add(unNum); 
     add(unitNumber); 
     add(prodPrice); 
     add(price); 
     add(restkFee); 
     add(rsFee); 
     add(prodInValue); 
     add(prodValue); 
     add(totalValue); 
     add(tValue); 
     add(first); 
     add(previous); 
     add(next); 
     add(last); 
     setLookAndFeel(); 
     setVisible(true); 


    } 



    public void updateFields() 
    { 
     nb++; 
     itemNumber.setText(Double.toString(titles[nb].getitemNum())); 
     prodName.setText(titles[nb].getprodName()); 
     year.setText(Integer.toString(titles[nb].getYear())); 
     unitNumber.setText(Integer.toString(titles[nb].getunitNum())); 
     price.setText(Double.toString(titles[nb].getprice())); 
     rsFee.setText(Double.toString(titles[nb].getRestkFee())); 
     prodValue.setText(Double.toString(titles[nb].getprodValue())); 

    } 




    public void actionPerformed(ActionEvent evt){ 
     Object source = evt.getSource(); 
     if (source == next) 
     { 
      if (titles[nb]== titles[8]) 
      { 
       titles[nb] = titles[0]; 
      } 
      else { 
       nb++; 
      } 
      updateFields(); 
     } 

    } 

    private void setLookAndFeel() 
    { 
     try{ 
      UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); 
         SwingUtilities.updateComponentTreeUI(this); 
      } catch (Exception e) { 
       System.err.println("couln't use the system"+ "look and feel: " + e); 
      } 

    } 


    } 

답변

2

당신이 레코드를 너무 빨리 진행되는 이유 덕분에 두 번 당신의 nextJButtonActionListener을 추가 한 것입니다 귀하의 updateFields 메소드의 경우와 마찬가지로 ActionListener의 레코드 색인 (nb)도입니다. 이 증분을 에서 하나씩 위치에서 제거하십시오.

또한 마지막 제목에 도달했는지 확인하면 기록 색인 nb을 재설정하지 않습니다. 당신은 할 수있다 :

if (titles[nb] == titles[8]) { 
    nb = 0; 
    ... 
+0

나는 그것을 보았다. 그러나 나는 그것을 제거했다. [2] 프로그램이 충돌한다. 흥미로운 점은 타이틀 [3]부터 시작해야한다는 것이다. 제목에 [4] 그래서 나는 요소 0에 그것을 다시 시작했고, 표시 할 첫 번째 제목은 알파벳 순서로 정렬 되었기 때문에 [3] 표시되어야합니다. 그러나 다른 요소는 건너 뜁니다. – Jason

+0

당신이 말하는 것을보고 고맙습니다. 도움. 이제 나는 다음 버튼을 추가하려고 할 때 Actionperformed 문제를 발견했습니다. – Jason

관련 문제