У меня есть JFrame с JTree на нем (созданный в функции «get_Classification()»). Эта функция должна возвращать имя выбранного узла (щелкнув двойным) как String.Как подождать ввода выбора
Как только я запустил приложение, метод возвращает значение null, если я затем дважды щелкните узел, значение будет напечатано на консоль, как ожидалось.
Я предполагаю, что метод закончен, прежде чем пользователь сможет выбрать значение (на самом деле 3-4 уровня, занимая около 5 секунд). Если у меня был «Thread.sleep (1000)», JTree не показывается до тех пор, пока второй не пройдет ...
Как подождать ввода пользователя до того, как метод вернет значение, а также увидит дерево заранее?
Некоторые функции ниже:
public String ret = null;
private DefaultTreeModel model = new DefaultTreeModel(top);
private JTree baum = null;
MouseListener ml = new MouseAdapter() {
public void mousePressed(MouseEvent e) {
TreePath selPath = baum.getPathForLocation(e.getX(), e.getY());
if (selPath != null) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) selPath.getLastPathComponent();
if (e.getClickCount() == 2 && model.isLeaf(node)) {
ret = node.toString();
System.out.println(ret);
}
}
}
};
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Frame window = new Frame();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public Frame() {
initialize();
}
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 500, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Map<String, String> tree = new HashMap<String, String>();
tree.put("Klebebänder", "Hilfsstoffe und Beschichtungsstoffe");
tree.put("Lacke", "Hilfsstoffe und Beschichtungsstoffe");
tree.put("Pulver", "Hilfsstoffe und Beschichtungsstoffe");
String k = get_Klassifizierung(tree);
System.out.println(k);
}
private String get_Klassifizierung(Map<String, String> tree) {
setupTree(tree); // creates the tree
waitForInput();
return ret;
}
private void waitForInput() {
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Спасибо за вашу помощь
Подробнее о [деревьях в Swing] (https://docs.oracle.com/javase/tutorial/uiswing/components/tree.html) –
Дерево и выбор работают, проблема в том, что функция закончена раньше, чем пользователь может отреагируйте .. – IVIike
Вам нужно провести некоторое исследование «шаблона наблюдателя», в частности «TreeSelectionListener». Я предлагаю вам взглянуть на [Как использовать деревья] (http://docs.oracle.com/javase/tutorial/uiswing/components/tree.html), эта концепция является фундаментальной для Swing (и большинства графических интерфейсов) – MadProgrammer