2

ユーザーが必要に応じて 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();
  }
}
4

0 に答える 0