2012-07-11 4 views
2

저는 해당 원재료 제공 업체의 브로셔를 관리 할 가족 기업용 프로그램을 만들고 있습니다. 모든 코드가 필요할 것 같아서 pastebin에 게시했습니다. 나는 문제가 생각하는 곳 http://pastebin.com/Gc3aLe10JScrollPane에 JList가 표시되지 않습니다.

는 그러나 또한, 나는 여기에 연결 :

tnBuscar.addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent e) { 

      String search = searchField.getText(); 
      Connection con = null; 
      java.sql.Statement st = null; 
      ResultSet rs = null; 

      String url = "jdbc:mysql://localhost:3306/"; 
      String db = "FAVEGA"; 
      String driver = "com.mysql.jdbc.Driver"; 
      String user = "root"; 
      String pass = ""; 
      try { 
       Class.forName(driver); 
       con = DriverManager.getConnection(url + db, user, pass); 
       con.setAutoCommit(false); 
       st = con.createStatement(); 
       String sql = "SELECT * FROM catalogos WHERE id = '" + search + "' OR name LIKE '%" + search + "%' OR keywords LIKE '%" + search + "%'"; 
       rs = st.executeQuery(sql); 
       while (rs.next()) { 
        final String resultName = rs.getString("name"); 
        buffer.add(resultName); 
       } 
      } catch (ClassNotFoundException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } catch (SQLException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      }finally{ 
       btnEditar.setVisible(true); 
       btnReiniciar.setVisible(true); 
       final JList list = new JList(buffer.toArray());   
       final JScrollPane scrollPane = new JScrollPane(list); 
       scrollPane.add(list); 
       scrollPane.setViewportBorder(new LineBorder(new Color(0, 0, 0))); 
       scrollPane.setBounds(67, 195, 269, -143); 
       buscarPanel.add(scrollPane);      
       list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
       list.setBounds(0, 0, 435, 240); 

       scrollPane.setPreferredSize(new Dimension(70, 80)); 
       list.setLayoutOrientation(JList.VERTICAL); 
       buscarPanel.invalidate(); 
       buscarPanel.validate(); 
       btnEditar.addActionListener(new ActionListener(){ 
        public void actionPerformed(ActionEvent e) { 
         if(list.getSelectedValue() != null){ 
          String selectedValue = (String) list.getSelectedValue(); 
          tab.setSelectedIndex(2); 
          btnReiniciar.addActionListener(new ActionListener(){ 
           public void actionPerformed(ActionEvent e) { 
           scrollPane.setVisible(false); 
           btnEditar.setVisible(false); 
           btnReiniciar.setVisible(false); 
          } 
          }); 
       } 
        } 
       }); 
      } 
     } 
    }); 

이 버튼을 누르면 검색 내 데이터베이스에있는 항목 만이 실행될 때 어떻게 든 JList의를로드하지 않습니다. 문제가 무엇입니까? 추신 : 런타임 오류가없고 스택 추적이 없습니다. 대신 &을 제거 사용 XxxListModelXxxModel must be done on EDT

  • 바로 finally 블록에 JPanel

  • 모든 업데이트에 JComponents를 추가

  • 답변

    3
    1. 전체 GUI를에서 re_create하지 않는,

    2. 은 항상 해고되었지만 GUI를 생성하기위한 적당한 장소가 아닙니다.

    3. 는 제거하면 revalidate() & repaint()를 호출 한 후 container

    +0

    당신이 설명해 주시겠습니까 이미 눈에 보이는 약간 느린에 /에서 JComponent를 추가해야? 이것은 windowsBuilder에 의해 만들어졌고 몇 가지 변경 사항이 추가되었습니다. Java와 프로그래밍에 익숙하지 않으므로 더 자세히 설명해주십시오. –

    +1

    @ user1178729 : 어디서든 표시되지 않는 구성 요소 인 finally 블록에 새로운 구성 요소가 많이 생성됩니다. GUI에서 이미 구현 된 구성 요소에 정보를 단순히 표시하지 않는 것이 어떻습니까? 그의 커다란 대답은 mKorbel에게 1+ 이상입니다. –

    +0

    finally에 선언 된 구성 요소가 나중에 표시됩니다. 필자는 finally에 선언 된 두 요소, 즉 rs.hasNext() 이벤트의 버퍼 변수를 사용하기 때문에 목록에 추가 된 목록과 scrollPane을 찾았습니다. scrollPane은 필요에 따라 추가해야한다고 생각합니다. 명부. –

    관련 문제