Так что мне стало скучно и хотелось сделать небольшое приглашение 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) {
}
}
Ваш основной метод вызывает новый тест(); что это? Вероятно, вы хотите сделать что-то вроде нового CommandPrompt(); – MeBigFatGuy
О да, класс сначала назывался тестом, потому что, когда я начал эту программу, я не знал, что делать. Просто переименован прямо перед публикацией, чтобы вы, ребята, могли легче различать окна. Забыл изменить главный метод, спасибо :) – opimba