У меня, похоже, проблемы с моим кодом java gui, и я понятия не имею, почему он не работает.Проблемы с компонентами swing и событиями awt
Что должно произойти, когда мышь нажата на панели или кадр - пока что позволяет просто сказать панель; так как это всего лишь тест, в конце концов этот код будет реализован для другого компонента gui, но я бы хотел, чтобы эта работа начиналась - всплывающее меню должно стать видимым, а фокус должен быть установлен в текстовом поле . Затем, когда пользователь нажимает кнопку ввода или фокус на текстовом поле теряется, всплывающее меню должно скрываться, а текст сбрасывается до нуля или независимо от того, что мне нужно.
Так это то, что я писал:
public class Test {
private final JFrame frame = new JFrame();
private final JPanel panel = new JPanel();
private final JPopupMenu menu = new JPopupMenu();
private final JTextField field = new JTextField();
private final Obj obj;
//... constructor goes here
public void test(){
frame.setSize(new Dimension(200,200));
field.setColumns(10);
field.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
obj.method(field.getText());
menu.setVisible(false);
field.setText("");
}
});
field.addFocusListener(new FocusListener() {
public void focusLost(FocusEvent e) {
menu.setVisible(false);
field.setText("");
}
//... focus gained event goes here
});
panel.addMouseListener(new MouseListener() {
public void mouseClicked(MouseEvent e) {
menu.setLocation(e.getX(), e.getY());
menu.setVisible(true);
field.requestFocusInWindow();
}
//... other mouse events go here
});
menu.add(field);
frame.getContentPane().add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
С кодом, как написано здесь меню автоматически скрывается сразу после я нажимаю. Он просто вспыхивает на экране ненадолго, а затем прячется, не делая ничего другого.
Если я изменю код, чтобы исключить любые вхождения menu.setVisible(false)
, тогда текстовое поле никогда не будет фокусироваться.
Это из-за неправильного использования JPopupMenu? Где я иду не так?
Также обратите внимание, что я оставил основной или объект. Они находятся в другом файле и, скорее всего, незначительны для этой проблемы. Obj.method() ничего не делает, и основной вызов вызывает только конструктор Test и метод test().
Какова цель всплывающего меню? – user101884
Кажется странным, что у вас есть текстовое поле во всплывающем меню. Какова мотивация такого подхода? Возможно, есть еще один способ сделать это ... – basszero