У меня проблема со свингом, которую я не могу решить уже целый день. Я хочу показывать всплывающее окно в JWindow
, если кто-то вводит JTextField
. Но если макет использует JGoodies FormLayout
с большим количеством компонентов в одной строке, то отображение будет повреждено.
У тебя есть идеи?
Скриншот после ввода нескольких букв во второе текстовое поле:
После редактирования кода Jans и трехкратного ввода «a»:
Код на Java:
package eu.eyan;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JWindow;
import com.jgoodies.forms.factories.CC;
import com.jgoodies.forms.layout.FormLayout;
public class Snippet {
public static void main(String[] args) {
JTextField tf = new JTextField(10);
JPanel panel = new JPanel();
panel.setLayout(new FormLayout("p", "p,p,p"));
panel.add(new JTextField("before"), CC.xy(1, 1));
panel.add(tf, CC.xy(1, 2));
panel.add(new JTextField("after"), CC.xy(1, 3));
JFrame frame = new JFrame();
frame.setLayout(new FormLayout("p,p,p", "p"));
frame.add(new JLabel("bef"), CC.xy(1, 1));
frame.add(panel, CC.xy(2, 1));
frame.add(new JLabel("aft"), CC.xy(3, 1));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.pack();
JWindow popup = new JWindow();
popup.setLayout(new FormLayout("p", "p"));
JLabel l = new JLabel("popup");
popup.add(l, CC.xy(1, 1));
popup.pack();
tf.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
popup.setVisible(true);
}
});
}
}
val panel = new JPanel();
Что такоеval
? Чтобы быстрее получить помощь, опубликуйте минимально воспроизводимый пример или Короткий, автономный, правильный пример. - person Andrew Thompson   schedule 04.09.2016popup
не упакован, пока не будет обнаруженKeyEvent
. Он должен быть упакован до того, как станет видимым! - person Andrew Thompson   schedule 04.09.2016