ユーザーが必要に応じて JTextFields を GUI に追加できるようにする Swing GUI があります。これをコンソール(ubuntu)でローカルに実行すると、すべて正常に動作します.X11転送を使用してWindowsボックスでCygwinからGUIを実行すると、すべて正常に開始されますが、「追加」ボタンをクリックしてGUI に新しい JTextField を追加すると、テキスト フィールドは期待どおりに表示されますが、長い間クリックしたり、変更したりできません。実際、元のテキスト フィールドをクリックすることもできません.30 秒ほど経つと、テキスト フィールドが元に戻り、[追加] をもう一度クリックするまで正常に機能します。
問題を示す SSCCE を以下に示します。繰り返しますが、これは X11 転送で実行している場合にのみ発生するようです。Ubuntu コンソールで直接実行すると、期待どおりに動作するため、他のすべての人が再現できるかどうかはわかりません。
最後の情報 - 私の実際のプログラムでは、追加ボタンをクリックすると、JComboBox と 2 つの JTextField が追加されます。コンボ ボックスはすぐに反応しますが、GUI のすべてのテキスト フィールド (新しいものも古いものも) はそうではありません。
うーんFrame.java:
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
public class HmmFrame extends JFrame
{
ArrayList< JTextField > fields;
JPanel mainPan;
JButton addButton;
HmmFrame()
{
super("Hmmm");
JTextField curField;
fields = new ArrayList< JTextField >();
setLayout(new FlowLayout());
mainPan = new JPanel(new FlowLayout());
this.add(mainPan);
addButton = new JButton("Add");
addButton.addActionListener(new HmmListener());
this.add(addButton);
curField = new JTextField("Try");
fields.add(curField);
updateGUI();
setVisible(true);
}
public void updateGUI()
{
mainPan.removeAll();
for (JTextField curField : fields)
{
mainPan.add(curField);
}
pack();
}
public class HmmListener implements ActionListener
{
public void actionPerformed(ActionEvent actEv)
{
JTextField curField;
curField = new JTextField("New One" + fields.size());
fields.add(curField);
updateGUI();
}
}
}
うーん.java (ドライバー)
public class Hmm
{
public static void main(String [] args)
{
HmmFrame hmmFrame;
hmmFrame = new HmmFrame();
}
}