2016-07-14 3 views
0

Я попытался добавить возможность просмотра файлов в свою программу. Я хотел использовать код отсюда: 1 (ответ Гилберта), но для меня было важно иметь JTree в определенном положении и размере. К сожалению, когда я это сделал, JTree не «отвечает», когда я нажимаю на него.Невозможно использовать JTree без LayoutManager

Вот код:

public class Frame extends JFrame implements Runnable { 

private DefaultMutableTreeNode root; 

private DefaultTreeModel treeModel; 

private JTree tree; 
public File fileRoot; 

public Frame(){ 
    super("FileBrowser"); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setVisible(true); 

    setSize(480, 320); 
    setLocation(50,50); 
    getContentPane().setLayout(null); 

    fileRoot = new File("C:/"); 
    root = new DefaultMutableTreeNode(new FileNode(fileRoot)); 
    treeModel = new DefaultTreeModel(root); 

    tree = new JTree(treeModel); 

    tree.setBounds(10, 39, 155, 177); 
    getContentPane().add(tree); 
    tree.setShowsRootHandles(true); 

} 


@Override 
public void run() { 
    CreateChildNodes ccn = new CreateChildNodes(fileRoot, root); 
    new Thread(ccn).start(); 
} 

} 

Основной класс:

public class main { 
    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Frame()); 
    } 
} 

Когда я комментирую

getContentPane().setLayout(null); 

и пусть JTree заполнить весь кадр, он работает, как он должен

ответ

1

Попробуйте изменить следующие строки:

tree.setBounds(10, 39, 155, 177); 
getContentPane().add(tree); 

к

JScrollPane scroller = new JScrollPane(tree); 
scroller.setBounds(10, 39, 155, 177); 
getContentPane().add(scroller); 

Если мое предложение не имеет никакого эффекта, попробуйте создать SSCCE, так что я могу видеть, что это не так.

P.S. Попытайтесь изучить менеджеров макетов. Они очень полезны.

+0

Спасибо, это работает! Я знаю, что, как правило, гораздо лучше использовать менеджеры макетов, но в моем случае я хочу отображать свою программу на определенном экране, а макет - не ключевая функция, поэтому я выбрал более простой способ. – Ch0mik18

+1

Чтобы подробнее узнать о том, что в этом ответе ** больше всего ** стоит обратить внимание: Java GUI должны работать с разными ОС, размером экрана, разрешением экрана и т. Д., Используя разные PLAF в разных локалях. Таким образом, они не способствуют идеальной компоновке пикселей. Вместо этого используйте диспетчеры макетов или [их комбинации] (http://stackoverflow.com/a/5630271/418556), а также макет и границы для [пробела] (http://stackoverflow.com/a/17874718/ 418556). –

+0

@ Ch0mik18 в этом случае было бы неплохо, если бы вы приняли мой ответ как правильный. –

Смежные вопросы