2014-11-22 1 views
-1

Так что мне стало скучно и хотелось сделать небольшое приглашение commando на Java. На данный момент я перерабатываю ls-команду из Bash-Shell на Linux. Поскольку сама командная строка - это просто небольшое окно, я должен показать результат команды ls в отдельном окне, я подумал, что небольшой список со всеми файлами в каталоге (что то, что делает ls) появляется справа подсказки было бы хорошо. Я просто назвал его sideWindow и сделал его JFrame, потому что я потерпел неудачу, когда попытался сделать его диалогом. Как показывают учебные пособия, я добавляю JPanel и устанавливаю его Layout to Grid, имея только один столбец, потому что я хочу, чтобы sideWindow отображал список всех файлов в каталоге, один файл под другим. Таким образом, количество строк зависит от количества файлов в этом каталоге, а также от размера кадра.Почему мой GridLayout не работает? (JPanel in JFrame)

Но по какой-то причине это окно вообще не отображается, я даже не установил место, где оно покажется. Держу пари, что это действительно глупая ошибка, исходящая от моей неопытности, но я просто не могу понять это.

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

Спасибо заранее!

Вот код:

import java.awt.*; 
import javax.swing.*; 
import java.awt.event.*; 
import java.net.URI; 
import java.io.*; 


public class CommandPrompt extends JFrame implements KeyListener{ 

/** 
* 
*/ 
private static final long serialVersionUID = 1231231; 
JTextField eingabe = new JTextField(); 
Desktop desktop = Desktop.getDesktop(); 
JLabel path = new JLabel(); 
String pathName = "/"; 

public CommandPrompt() { 
    setTitle("Colamanndo"); 
    setSize(402,88); 
    setResizable(false); 
    setLayout(null); 
    setBackground(Color.black); 

    eingabe.setToolTipText("Ich mag Cola"); 
    eingabe.setSize(399,30); 
    eingabe.setLocation(1,1); 
    eingabe.setBackground(Color.black); 
    eingabe.setForeground(Color.green); 
    eingabe.addKeyListener(this); 
    add(eingabe); 

    path.setText(pathName); 
    path.setToolTipText("Tu ich wirklich"); 
    path.setSize(399,30); 
    path.setLocation(3,24); 
    add(path); 

    setVisible(true); 
} 

public static void main(String[] args) { 
    new test(); 
} 

public void keyPressed(KeyEvent e) { 
    if (e.getKeyCode() == 10) { 
     String comm = eingabe.getText(); 
     eingabe.setText(""); 
     idCommand(comm); 
    } 

    if (e.getKeyCode() == 38) { 
     eingabe.setText("Es klappt"); 
     //Eigentlich aus .txt Datei letzten Befehl lesen 
    } 
// System.out.println(e.getKeyCode()); 
} 

@Override 
public void keyReleased(KeyEvent arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void keyTyped(KeyEvent arg0) { 
    // TODO Auto-generated method stub 

} 

public void idCommand(String cText) { 
    try { 
    StringBuilder command = new StringBuilder(); 
    StringBuilder parameters = new StringBuilder(); 
    parameters.append(""); 

    for(int i = 0;i<cText.length();i++) { 
     command.append(cText.charAt(i)); 
     if (cText.charAt(i) == ' ' || i == cText.length()-1) { 
      if (command.toString().charAt(i) == ' ') { 
       command.deleteCharAt(i); 
      }    
      if (cText.length()>i+1) { 
       for (int j=i+1;j<cText.length();j++) { 
        parameters.append(cText.charAt(j)); 
       } 
      } 
      System.out.println("Command identified: /" + command.toString() + "/"); 
      System.out.println("Parameters identified: /" + parameters.toString() + "/"); 
      //command durch liste schicken 
      if (command.toString().equals("exit")) { 
       System.exit(0); 
      } else 
      if (command.toString().equals("netflix")) { 
       desktop.browse(new URI("http://www.netflix.de")); 
      } else 
      if (command.toString().equals("vampire")) { 
       desktop.browse(new URI("http://www.netflix.com/WiPlayer?locale=de-DE&movieid=70212855")); 
      } else 
      if (command.toString().equals("chrome")) { 
       desktop.browse(new URI("http://www.google.com")); 
      } else 
      if (command.toString().equals("shutdown")) { 
       Runtime.getRuntime().exec("sudo shutdown -s now"); 
      } else 
      if (command.toString().equals("gedit")) { 
       Runtime.getRuntime().exec("gedit"); 
      } else 
      if (command.toString().equals("cd")) { 
       cd(parameters); 
      } else 
      if (command.toString().equals("ls")) { 
       ls(parameters); 
      } 
      break; 
      } 
     } 
     } catch (Exception e) { 
      } 

} 

public void ls(StringBuilder parameters) { 
    try { 
     File directory = new File(pathName); 
     String[] files = directory.list(); 

     //sideWindow is the frame that shows the files 
     //in that directory 
     JFrame sideWindow = new JFrame(); 
     sideWindow.setSize(files.length*30,100); 
     sideWindow.setName("Files in" + pathName); 
     JPanel filePanel = new JPanel(); 
     sideWindow.add(filePanel); 
     filePanel.setLayout(new GridLayout(files.length,1)); 
    // filess.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT); 

     if (parameters.toString().equals("-a")) { 
      for (int i = 0;i<files.length;i++) { 
      filePanel.add(new JLabel(files[i])); 
      } 

     } else { 
      for (int i = 0;i<files.length;i++) { 
       if (files[i].charAt(0) != '.') { 
        filePanel.add(new JLabel(files[i])); 
       } 
      } 
     } 
    // pack(); 
     add(sideWindow); 
     filePanel.setVisible(true); 
     sideWindow.setVisible(true);  

    } catch (Exception e) { 

    } 
} 

public void cd(StringBuilder parameters) { 
    //falls die parameter leer sind, wird pathname zurückgesetzt 
    if (parameters.toString().equals("")) { 
     pathName = "/"; 
    } 
    //falls bei path name am ende ein/ist, wird es entfernt 
    if (pathName.charAt(pathName.length()-1) == '/') { 
     pathName = pathName.substring(0, pathName.length()-1); 
    } 
    //falls am anfang vom parameter kein/ist, dann wird eins hinzugefügt 
    if (parameters.toString().charAt(0) != '/') { 
     pathName += "/"; 
    } 
    //die parameter werden an pathname rangehängt 
    pathName += parameters.toString(); 
    path.setText(pathName); 
} 

public void addCommand(String commandName, String commandCode, boolean isBash) { 

} 

}

+0

Ваш основной метод вызывает новый тест(); что это? Вероятно, вы хотите сделать что-то вроде нового CommandPrompt(); – MeBigFatGuy

+0

О да, класс сначала назывался тестом, потому что, когда я начал эту программу, я не знал, что делать. Просто переименован прямо перед публикацией, чтобы вы, ребята, могли легче различать окна. Забыл изменить главный метод, спасибо :) – opimba

ответ

1

Я отправляю это как ответ, как я не могу комментировать (< 50 повторений).

Было бы намного полезнее, если бы вы могли опубликовать только соответствующую часть кода, так как это облегчает нам, чтобы ребята находили проблему.

Кроме того, я бы предложил использовать BoxLayout, если вы просто хотите отобразить один столбец вместо Grid Layout (из вашего вопроса).

Кроме того, поскольку sideWindow является JFrame, я не думаю, что он может быть добавлен в другой JFrame с использованием метода add. Для этого сделайте sideWindow JPanel и внесите необходимые изменения. Или, если вы хотите, чтобы он открывался в новом окне, создайте для него новый класс, а затем вызовите его конструктор, чтобы запустить его.

+0

Спасибо, это действительно помогло. Теперь я использую BoxLayout и сделал дополнительный класс lsWindow, расширяющий JFrame. – opimba

+0

Happy to help :) Это может помочь вам проверить документацию Java для JFrame и JPanel. Также upvote не повредит: D need 1 rep, чтобы комментировать – namsnath

+0

@namsnath Это ответ, поэтому нет необходимости говорить, что у вас недостаточно комментариев для комментариев. – CodingNinja

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