2011-09-25 4 views
2

기본 JFileChooser가 작동하지만, 내가 좋아하지 않는 것은 팝업한다는 사실입니다. 모든 동작이 이루어지는 하나의 GUI를 갖고 싶습니다.JPanel 내부의 JFileChooser; 사용자 선택 방법

이제는 그렇게 할 수있었습니다. 아래의 코드는 FileChooser 메뉴를 위의 팝업 대신 GUI 안에 멋지게 배치합니다.

내가 선택한 파일을 손에 넣는 방법에 어려움을 겪고 있습니다. JFileChooser가 Panel에 내장되어 있지 않을 때 작동하는 코드를 알고 있지만 작동하지 않습니다.

아무도 ??

ps. 나는 그것을 시도해 보았지만, 오라클이 그것을 컨테이너에 넣을 가능성에 대해 언급하고 있지만, 오라클은 예제를 제공하지 않습니다. 당신이 버튼을 누를에 응답합니다 JFileChooser를에 ActionListener를 추가 할 수와의 ActionEvent의 getActionCommand이 눌러 진 버튼을 알려줍니다 http://download.oracle.com/javase/tutorial/uiswing/components/filechooser.html

import java.awt.*; 
import javax.swing.*; 

class SplitPane extends JFrame { 
    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
    private JSplitPane splitPaneV; 
    private JSplitPane splitPaneH; 
    private JPanel panel1; 
    private JPanel panel2; 
    private JPanel panel3; 

    public SplitPane() { 
     setTitle("Split Pane Application"); 
     setBackground(Color.gray); 

     JPanel topPanel = new JPanel(); 

     topPanel.setLayout(new BorderLayout()); 
     topPanel.setPreferredSize(new Dimension(700, 500)); 
     getContentPane().add(topPanel); 

     // Create the panels 
     createPanel1(); 
     createPanel2(); 
     createPanel3(); 

     // Create a splitter pane 
     splitPaneV = new JSplitPane(JSplitPane.VERTICAL_SPLIT); 
     topPanel.add(splitPaneV, BorderLayout.CENTER); 

     splitPaneH = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); 
     splitPaneH.setLeftComponent(panel1); 
     splitPaneH.setRightComponent(panel2); 

     splitPaneV.setLeftComponent(splitPaneH); 
     splitPaneV.setRightComponent(panel3); 
    } 

    public void createPanel1() { 
     panel1 = new JPanel(); 
     panel1.setLayout(new BorderLayout()); 

     // Add some buttons 
     panel1.add(new JButton("North"), BorderLayout.NORTH); 
     panel1.add(new JButton("South"), BorderLayout.SOUTH); 
     panel1.add(new JButton("East"), BorderLayout.EAST); 
     panel1.add(new JButton("West"), BorderLayout.WEST); 
     panel1.add(new JButton("Center"), BorderLayout.CENTER); 

    } 

    public void createPanel2() { 
     panel2 = new JPanel(); 
     panel2.setLayout(new FlowLayout()); 

     panel2.add(new JButton("Button 1")); 
     panel2.add(new JButton("Button 2")); 
     panel2.add(new JButton("Button 3")); 
    } 

    public void createPanel3() { 
     panel3 = new JPanel(); 
     panel3.setLayout(new BorderLayout()); 
     panel3.setPreferredSize(new Dimension(400, 100)); 
     panel3.setMinimumSize(new Dimension(100, 50)); 
     JFileChooser fileChooser = new JFileChooser(); 
     fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
     fileChooser 
       .setDialogTitle("Browse naar de locatie waar je de gesorteerde bestanden wil zetten en klik op \"OPEN\""); 
     panel3.add(fileChooser, BorderLayout.NORTH); 
    } 

    // this is where my quest starts. Now, I would like to work with the file 
    // chosen... 
    // for my ordinary 'popup' fileChoosers the code below works, so I tried the 
    // code below 

    // int returnVal = fileChooser.showOpenDialog(panel3); 
    // if (returnVal == JFileChooser.APPROVE_OPTION) 
    // fileName = fileChooser.getSelectedFile().getPath(); 
    // System.out.println(fileName); 

    // but in this case it messes everything up..., after uncommenting I lose 
    // the frames, and get a popup again... 
    // anybody a suggestion how to actually get the users chosen file? 

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

ActionListener를 JFileChooser에 추가 할 수 있고 ActionEvent의 getActionCommand가 어떤 버튼이 눌렀는지 알려주는 점에 유의하십시오. –

+0

몰랐습니다. 그것을 조정했습니다. 그걸 '-1'해야만 했나요? – FMolivierH

+0

예, 그랬지만, 게시물을 수정하면 -1이 취소 될 수 있습니다. 편집 : 그리고 방금 -1 제거했습니다. –

답변

6

참고. E.G.,

public void createPanel3() { 
     panel3 = new JPanel(); 
     panel3.setLayout(new BorderLayout()); 
     panel3.setPreferredSize(new Dimension(400, 100)); 
     panel3.setMinimumSize(new Dimension(100, 50)); 
     final JFileChooser fileChooser = new JFileChooser(); 
     fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
     fileChooser 
       .setDialogTitle("Browse naar de locatie waar je de gesorteerde bestanden wil zetten en klik op \"OPEN\""); 
     panel3.add(fileChooser, BorderLayout.NORTH); 
     fileChooser.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      if (e.getActionCommand().equals(JFileChooser.APPROVE_SELECTION)) { 
       System.out.println("File selected: " + fileChooser.getSelectedFile()); 
      } 
     } 
     }); 
    } 
+0

미스터 호버 크라운 뱀장어가 가득하다. 이것은 내가 필요한 것이다. 많은 감사합니다. – FMolivierH

+0

여러분을 환영합니다! –