2017-11-30 8 views
2

JFileChooserに、複数の列ではなく垂直スクロールを1つの列に含めるにはどうすればよいですか?JFileChooserの単一の列を使用した垂直スクロール

+0

あなたは詳細を使用することもできますが、デフォルトとして表示し、この質問を見て:https://stackoverflow.com/questions/16292502/how-can-i-start-the-jfileチューナーチョイス詳細ビュー – Ansharja

答えて

1

私はあなたの条件を理解していれば、あなたがJList#setLayoutOrientation(JList.VERTICAL)を使用することができるかもしれない:

enter image description here

import java.awt.*; 
import java.awt.event.*; 
import java.util.*; 
import java.util.stream.Stream; 
import javax.swing.*; 

public class FileChooserLayoutOrientationTest { 
    private Component makeUI() { 
    JTextArea log = new JTextArea(); 

    JButton button1 = new JButton("Default"); 
    button1.addActionListener(e -> { 
     JFileChooser chooser = new JFileChooser(); 
     int retvalue = chooser.showOpenDialog(log.getRootPane()); 
     if (retvalue == JFileChooser.APPROVE_OPTION) { 
     log.setText(chooser.getSelectedFile().getAbsolutePath()); 
     } 
    }); 

    JButton button2 = new JButton("LayoutOrientation: VERTICAL"); 
    button2.addActionListener(e -> { 
     JFileChooser chooser = new JFileChooser(); 
     stream(chooser) 
     .filter(JList.class::isInstance) 
     .map(JList.class::cast) 
     .findFirst() 
     .ifPresent(FileChooserLayoutOrientationTest::addHierarchyListener); 
     int retvalue = chooser.showOpenDialog(log.getRootPane()); 
     if (retvalue == JFileChooser.APPROVE_OPTION) { 
     log.setText(chooser.getSelectedFile().getAbsolutePath()); 
     } 
    }); 

    JPanel p = new JPanel(); 
    p.setBorder(BorderFactory.createTitledBorder("JFileChooser")); 
    p.add(button1); 
    p.add(button2); 

    JPanel pp = new JPanel(new BorderLayout()); 
    pp.add(p, BorderLayout.NORTH); 
    pp.add(new JScrollPane(log)); 
    return pp; 
    } 

    // @see https://github.com/aterai/java-swing-tips/blob/master/GetComponentsRecursively/src/java/example/MainPanel.java 
    public static Stream<Component> stream(Container parent) { 
    return Arrays.stream(parent.getComponents()) 
     .filter(Container.class::isInstance) 
     .map(c -> stream(Container.class.cast(c))) 
     .reduce(Stream.of(parent), Stream::concat); 
    } 
    private static void addHierarchyListener(JList<?> list) { 
    list.addHierarchyListener(new HierarchyListener() { 
     @Override public void hierarchyChanged(HierarchyEvent e) { 
     if ((e.getChangeFlags() & HierarchyEvent.SHOWING_CHANGED) != 0 
      && e.getComponent().isShowing()) { 
      list.putClientProperty("List.isFileList", Boolean.FALSE); 
      list.setLayoutOrientation(JList.VERTICAL); 
     } 
     } 
    }); 
    } 
    public static void main(String[] args) { 
    EventQueue.invokeLater(() -> { 
     JFrame f = new JFrame(); 
     f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     f.getContentPane().add(new FileChooserLayoutOrientationTest().makeUI()); 
     f.setSize(320, 240); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    }); 
    } 
} 
+0

それは働いた!ありがとうございました!!!! –

関連する問題