2012-04-07 3 views
0

내 구성 요소는 JFileChooser를 다른 구성 요소에 포함시키는 것입니다. 예를 들어 파일을 선택하고 "추가"버튼을 클릭하면 파일이 JList에 추가됩니다 (런타임 중에) .I이 형태의 예를 들어 GUI를 만들었습니다JFileChooser를 다른 구성 요소에 포함

GUI

나는 JFileChooser로와 JList의 사이에 링크를 만들 수 없습니다입니다. 아무도 도와 줄 수 있니?

또한 내가 노력 것을 볼 수 있습니다 사람이 나를 도울 수 있다면

 public Converter() { 
    setForeground(Color.BLACK); 
    getContentPane().setLayout(null); 

    textField = new JTextField(); 
    textField.setBounds(20, 12, 714, 20); 
    getContentPane().add(textField); 
    textField.setColumns(10); 

    final JScrollPane scrollPane = new JScrollPane(); 
    setTitle("ABC"); 
    scrollPane.setBounds(0, 470, 766, -438); 
    getContentPane().add(scrollPane); 

    list = new JList(); 
    list.setBackground(Color.LIGHT_GRAY); 
    list.setForeground(Color.GRAY); 

    vector = new Vector<File>(); 
    field = new JTextField(); 

    final JFileChooser fileChooser = new JFileChooser(); 
    fileChooser.setBounds(10, 43, 485, 463); 
    getContentPane().add(fileChooser); 


    list = new JList(vector); 
    list.setBackground(Color.LIGHT_GRAY); 

    JButton btnNewButton = new JButton("ADD"); 
    btnNewButton.setBounds(505, 106, 89, 23); 
    btnNewButton.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
       add(); 
     } 

     private void add() { 
      // TODO Auto-generated method stub 

       { 
        for (File file : fileChooser.getSelectedFiles()) { 
         field.setText(file.getAbsolutePath()); 
         vector.add(file); 
         System.out.println("Added..!!"); 
       } 
       //list.updateUI(); 
       } 
      } 
    }); 
    getContentPane().add(btnNewButton); 


    JButton btnNewButton_1 = new JButton("REMOVE"); 
    btnNewButton_1.setBounds(505, 190, 89, 23); 
    btnNewButton_1.addActionListener(new ActionListener() { 
       public void actionPerformed(ActionEvent e) { 
       remove(); 
       } 

     private void remove() { 
      if(list.getSelectedIndices().length > 0) { 
        int[] selectedIndices = list.getSelectedIndices(); 
        for (int i = selectedIndices.length-1; i >=0; i--) { 
         vector.removeElementAt(i); 
         System.out.println("Removed..!!"); 
        } 
        } 
        list.updateUI(); 

     } 
     }); 
    getContentPane().add(btnNewButton_1); 

    JButton btnNewButton_2 = new JButton("DECODE"); 
    btnNewButton_2.setBounds(505, 278, 89, 23); 

    getContentPane().add(btnNewButton_2); 

    JList list_1 = new JList(); 
    list_1.setForeground(Color.BLACK); 
    list_1.setBackground(Color.LIGHT_GRAY); 
    list_1.setBounds(604, 109, 162, 328); 
    getContentPane().add(list_1); 

    final JFrame Jframe = new JFrame(); 
    Jframe.setFont(new Font("Arial", Font.BOLD, 14)); 
    Jframe.setForeground(Color.WHITE); 
    Jframe.setTitle("Additional Loader Information"); 
    Jframe.getContentPane().setLayout(null); 

}  

static class PreviewPane extends JPanel implements PropertyChangeListener { 
    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
    private JLabel label; 
    private int maxImgWidth; 
    public PreviewPane() { 
     setLayout(new BorderLayout(5,5)); 
     setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); 
     add(new JLabel("Preview:"), BorderLayout.NORTH); 
     label = new JLabel(); 
     label.setBackground(Color.WHITE); 
     label.setOpaque(true); 
     label.setPreferredSize(new Dimension(200, 200)); 
     maxImgWidth = 195; 
     label.setBorder(BorderFactory.createEtchedBorder()); 
     add(label, BorderLayout.CENTER); 
    } 

    public void propertyChange(PropertyChangeEvent evt) { 
     Icon icon = null; 
     if(JFileChooser.SELECTED_FILE_CHANGED_PROPERTY.equals(evt 
       .getPropertyName())) { 
      File newFile = (File) evt.getNewValue(); 
      if(newFile != null) { 
       String path = newFile.getAbsolutePath(); 
       if(path.endsWith(".gif") || path.endsWith(".jpg")                
          || path.endsWith(".png") || path.endsWith(".bmp")) { 
        try { 
         BufferedImage img = 
              ImageIO.read(newFile); 
         float width = img.getWidth(); 
         float height = img.getHeight(); 
         float scale = height/width; 
         width = maxImgWidth; 
         height = (width * scale); 
              // height should be scaled from new width        

        } 
        catch(IOException e) { 
         // couldn't read image. 
        } 
       } 
      } 

      label.setIcon(icon); 
      this.repaint(); 

     } 
        } 

       } 

       public static void main(String args[]) {   
        // Create an instance of the test application   
         Converter frame = new Converter();   
         frame.pack();  
          frame.setVisible(true);  
         } 
       } 

정말 도움이 될 것입니다.

+0

은 어떻게 링크를 생성 할 수 없습니다? 오류, 예외 또는 예기치 않은 동작이 발생합니까? 문제를보다 철저하게 설명하십시오. 또한 [SSCCE] (http://sscce.org)를 만드는 것이 큰 도움이 될 것입니다. – Jeffrey

+0

안녕하세요. 작동하지 않습니다. 어떤 오류도 발생하지 않지만 버튼을 클릭하면 아무런 동작이 일어나지 않고 전혀 작동하지 않습니다. ( – dmurali

+0

코드에서 '새 JList (fileChooser)'(첫 번째 줄)를 던져야합니다. 오류가 발생했습니다. [SSCCE] (http://sscce.org)를 작성하거나 코드를 게시하는 것이 좋습니다. – Jeffrey

답변

1

실행중인 문제는 ListModelJList이 (가) 당신을 위해 생성하는 변경 사항을 지원하지 않는다는 것입니다. DefaultListModel을 작성하고 Vector 대신이를 사용해야합니다.

예 :

public static void main(String[] args) { 
    SwingUtilities.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      final DefaultListModel<String> model = new DefaultListModel<>(); 
      JList<String> list = new JList<>(model); 

      JButton add = new JButton("Click Me!"); 
      add.addActionListener(new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        model.addElement(model.getSize() + ""); 
       } 
      }); 

      JPanel p = new JPanel(); 
      p.add(new JScrollPane(list)); 
      p.add(add); 

      JFrame frame = new JFrame("Example"); 
      frame.setContentPane(p); 
      frame.pack(); 
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      frame.setVisible(true); 
     } 
    }); 
} 
+0

이 힌트를 많이 주셔서 감사합니다 ..! 하지만 다시, 문제는이 DeafaultListModel과 함께 JFileChooser를 통합하는 것입니다. – dmurali

+0

어떤 문제가 있습니까? 추가 버튼이 올바르게 보입니다. 단지'Vector' 대신'DefaultListModel'에 추가하십시오. – Jeffrey

+0

'JButton add = 새 JButton ("추가"); \t add.addActionListener (새의 ActionListener() { \t @Override \t 공공 무효의 actionPerformed (ActionEvent를 전자) { \t \t { \t \t (파일 파일 \t \t \t \t : fileChooser.getSelectedFiles()) { \t \t model.addElement (모델.getElementAt (0) + "파일"); \t System.out.println ("Added .. !!"); \t} \t \t \t }}} \t); ' – dmurali

0

JFileChooserJComponent, 그래서 당신은 단지 addBorderLayoutJPanel에를 할 수 있으며 전체 패널을 채울 것입니다.

+0

이 질문은 대답 질문에 어떻게 대답합니까? – Jeffrey

+0

테두리 레이아웃에서는 이러한 단추가 제대로 나타나지 않습니다. ? 나는 이미 borderlayout을 사용하고 Jpanel에 추가하여 시도했지만, 버튼을 클릭하면 파일 선택기가 열리 며 사용자가 선택해야합니다.하지만 원하는 부분입니다. 내가 C를 실행할 때 ode, JFilechooser는 이미 열려 있어야합니다 (그림과 같습니다). !! – dmurali

+0

그러면 컴포넌트에 JFileChooser가 내장 된 것을 원하지 않을 것입니다. – Dave

관련 문제