2013-12-13 2 views
0

개체가있는 패널이있는 스크롤 패널을 만들 때 모든 패널에 단추를 추가하고 클릭하면 해당 패널의 이름이 반환됩니다. 제품에 넣고 변수에 넣으십시오. 문제는, 액션 패널에 연결된 마지막 오브젝트 패널이 액션 리스너에 연결된다는 것입니다. 실제 패널 생성ActionListener가 모든 개체에서 작동하지 않습니다.

try{ 
    System.out.println(sql); 
    ResultSet rs = data.SQL.executeQuery(sql); 
    String list = ""; 
    int count=0; 
    while (rs.next()){ 
     count++; 
    } 
    ResultSet result = data.SQL.executeQuery(sql); 
    ProductDisplayPanel.removeAll(); 
    JPanel addPanel = new JPanel(); 
    addPanel.setLayout(new GridLayout (count, 1)); 
    JScrollPane scroll = new JScrollPane(); 

    while (result.next()) { 
     searchDisplay = new SearchDisplay (result);    
     scroll.add(searchDisplay); 
     addPanel.add(searchDisplay); 

    }  
    scroll.setPreferredSize(new Dimension(425,390)); 
    scroll.setViewportView(addPanel); 
    ProductDisplayPanel.add(scroll); 
    ProductDisplayPanel.revalidate(); 
    ProductDisplayPanel.repaint(); 
    System.out.println(list); 

    SearchDisplay.AddToCart.addActionListener(action); 
    frame.add(SearchDisplay.AddToCart); 
} catch (Exception ae){ 
     ae.printStackTrace(); 
    } 

} catch (Exception e1) { 

    e1.printStackTrace(); 
    } 

클래스 : 여기에 스크롤 및 개별 패널에 대한 코드입니다

public SearchDisplay(ResultSet result) throws Exception{ 

    setPreferredSize(new Dimension(500, 156)); 
    setVisible(true); 


    String link = result.getString("image"); 
    System.out.println(link); 

    BufferedImage icecream = ImageIO.read(new URL("file:///"+link)); 
    JLabel lblImage = new JLabel(new ImageIcon (icecream)); 

    name = result.getString("Name"); 
    JLabel lblName = new JLabel(name); 

    String category = result.getString("Pieces"); 
    JLabel lblFlavour = new JLabel("Pieces: "+category); 

    String productID = result.getString("ProductID"); 
    JLabel lblPrice = new JLabel("Product ID: " + productID); 

    String price = result.getString("Price"); 
    JLabel lblType = new JLabel("Price: "+ price +" kr"); 

    String age= result.getString("Age"); 
    JLabel lblBrand = new JLabel("Age: "+age); 



    AddToCart = new JButton("Add to cart"); 
+1

는'JScrollPane의 번호를 add'를 사용하지 마십시오 ...과 관련 된 항목을 알고 자신의 ActionListener의 것,이다 스크롤 창보기를 설정하는 방법이 아닙니다. 대신에, JScrollPane # setViewportView를 사용합니다. 자세한 내용은 [스크롤 창 사용 방법] (http://docs.oracle.com/javase/tutorial/uiswing/components/scrollpane.html)을 확인하십시오. 스크롤 창은 하나의보기 만 가질 수 있음을 기억하십시오. – MadProgrammer

+0

모든 패널이 문제없이 표시됩니다. 모든 패널에 JButton을 추가하고이 버튼에 리스너를 추가합니다. 문제는 그것이 패널 중 하나에서만 작동하고 클릭 할 때 모든 것이 작동하지 않는다는 것입니다. –

+1

액션 리스너가 어떻게 등록되었거나 작동하는지 보여주는 코드를 제공하지 않았습니까? (또한 실제로는 시리즈가 거의 없습니다. 실제로 스크롤 창이 작동하도록하는 사고) – MadProgrammer

답변

1

나는 당신이이 일을 예상하는 방법 만 잘 모르겠어요은 ...

당신은

while (result.next()) { 
     searchDisplay = new SearchDisplay (result);    
     // nb- Bad idea 
     scroll.add(searchDisplay); 
     addPanel.add(searchDisplay); 
    }  
    // nb- Worrisome... 
    scroll.setPreferredSize(new Dimension(425,390)); 
    scroll.setViewportView(addPanel); 
의 일련의 생성합니다 ( addPanel를 통해) 스크롤 창에 추가

그런 다음 당신은 어떤 정적 객체

SearchDisplay.AddToCart.addActionListener(action); 

연결이 무엇에 하나의 ActionListener를 추가하는 것? 이 AddToCart 단추는 추가해야 할 내용을 어떻게 알 수 있습니까? 당신은 다른 static 프로세스에서 변수를 설정합니까 ??

내가 SearchDisplay의 모든 인스턴스가 자신의 AddToCart의 것 것을 imagin 것이며, 그것이이

+0

searchdisplay 개체를 만든 후에 actionListener를 추가해야합니다. 그렇지 않으면 null 포인터 예외가 발생합니다. –

+0

@ GarfieldMcCracker : 솔루션을 시도하는 데 문제가있는 경우 코드 시도를 표시하고 모두 표시하려고합니다. 오류 메시지를 표시하고 예외를 throw하는 행을 나타냅니다. 1 +이 답변을. –

+0

@GarfieldMcCracker 가능한 한 "그룹"에 적용하려는 "단일"동작 수신기를 추가하는 것이 문제입니다. 문제는 "싱글"액션 리스너가 다른 아이템에 대해 어떻게 알 수 있습니까? – MadProgrammer

관련 문제