2009-12-01 2 views
0

Я работаю над проектом, в java, где пользователь должен выбрать файл для загрузки через jfilechooser. В любом случае, нужно сделать текстовое поле только для чтения, чтобы вы могли выбирать только файлы, нажимая их, а не записывая текстовое поле. Надеюсь, что я поставил свою проблему в явном виде, Djava filechooser

+0

из явное любопытство, это файл с именем «example.buab»? –

ответ

1

Я не считаю, что это возможно напрямую, и, судя по the API, я считаю, что это не тот случай. Возможно, вы могли бы имитировать его, зарегистрировав прослушиватель, который очистил текстовое поле после каждого нажатия клавиши.

Однако, вы, , уверены, что хотите сделать это? Лично я был бы очень расстроен, если бы я использовал селектор файлов, который был искалечен таким образом, особенно если бы я где-то копировал путь к файлу в буфер обмена и был вынужден вручную спуститься через кучу каталогов, среди других ситуаций ,

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

+0

ну, это был просто простой способ убедиться, что выбранный файл является фактическим файлом. Я думаю, мне просто нужно проверить, существует ли файл до того, как я начну загрузку – ev00l

1

На самом деле это не попытка ответа, но я бы спросил, почему вы хотите, чтобы текстовое поле было прочитано только. Вы ограничиваете пользователей и для чего именно? Изменение стандартного ожидаемого поведения файла-выборщика обычно не является хорошим подходом к снижению, если у вас нет ОЧЕНЬ разумной причины для этого.

Итак, извините, не совсем ответ, но, пожалуйста, подумайте, почему вы хотите это сделать. Как личное предпочтение мне нравится писать в текстовом поле. Это позволяет мне делать вставку, что позволяет очень быстро и просто перемещаться из одного каталога в другой.

+0

. Я могу понять, почему это был калечащий способ гарантировать, что файл существует. Спасибо за помощь – ev00l

0

Я думаю, что единственный способ сделать это - предоставить свой собственный FileChooserUI и установить его через setUI() на JFileChooser. Вероятно, это не так много, если вы подклассифицируете существующую реализацию из пакетов javax.swing.plaf, но проблема в том, что вы обходите весь механизм PLAF; изменение глобального L & F не будет работать для вашего файла.

2

Если у вас есть желание убедиться, что пользователь выбрал файл, а не каталог (на что указывают ваши ответы на другие ответы), вы можете использовать FileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);. Тем не менее, это параметр по умолчанию при создании экземпляра файла, поэтому, если ваш код не изменится в какой-то момент, вам не нужно будет его явно указывать.

Для Вашего удовольствия: http://java.sun.com/docs/books/tutorial/uiswing/components/filechooser.html

2

Если вы хотите, чтобы убедиться, что имя файла, введенное действителен до закрытия файла для выбора, то вы должны быть в состоянии сделать что-то вроде этого:

JFileChooser chooser = new JFileChooser(...) 
{ 
    public void approveSelection() 
    { 
     if (getSelectedFile().exists()) 
      super.approveSelection(); 
     else 
      JOptionPane.showMessageDialog(this, "Selected file does not exist"); 
    } 
}; 
+0

Большое спасибо, я попробую это! – ev00l