これは私が悩まされているメッセージです。これは、grid
キープレスコンボshift-rightarrow
またはshift-leftarrow
:
Exception in thread "AWT-EventQueue-0" javax.swing.text.StateInvariantError:
Bad caret position
shift-uparrow
(またはで「選択」しても問題ないことに注意してくださいshift-downarrow
。)
「選択した」セルのフォントを変更しようとすると発生します。
static Font fontSelected = new Font("Serif", Font.BOLD , POINTSIZE);
static Font fontNormal = new Font("Serif", Font.PLAIN, POINTSIZE);
(Font.type を同じ(両方とも BOLD、両方とも PLAIN、両方とも ITALIC) にすれば、問題ありません。)
エラーは、次のように定義されているスタック (という名前) にpush
「選択」したコードの近くで発生します。JTextField
stack
class GenericStack<E>:
public LinkedList <E> stack = new LinkedList<>();
スタックとフォントが使用されるクラス宣言は次のとおりです。
public class Grid extends GenericStack<JTextField> implements ActionListener, KeyListener, KeyCodes, Serializable
にプッシュされるものは次のstack
とおりです。
public static JTextField[][] cells = new JTextField[N][N];
cells
作成方法は次のとおりです。
guiFrame.add(textPanel);
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
cells[i][j] = addCell(textPanel, i, j);
private JTextField addCell (Container parent, int row, int col) {
JTextField cell;
cell = new JTextField();
cell.setFont(fontNormal); // 'default' font set
cell.setText("x"); // for debugging
String r, c; // 11x11 grid
if(row < N-1) r = "" + row; else r = "A"; // rows r: 0,1,2,...A
if(col < N-1) c = "" + col; else c = "A"; // cols c: 0,1,2,...A
cell.setActionCommand(r + c); // cell rc: 00..0A;10..1A;...A0..AA;
cell.addKeyListener(this);
cell.setHorizontalAlignment(JTextField.CENTER);
parent.add(cell);
return cell;
}
主なものは次のとおりです。
public static void main(String[] args)
{
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Grid();
}
});
}
フォントが変更される場所は次のとおりです(「選択された」セルの場合):
if(currentCell.selected){
Grid.cells[currentCell.row][currentCell.col].setBackground(Color.RED);
Grid.cells[currentCell.row][currentCell.col].setFont(fontSelected);
stack.push(Grid.cells[currentCell.row][currentCell.col]);
}
このコード ブロックでエラーが発生します。このsetFont
行をコメント アウトしても問題ありません。代わりに、同じフォントを含むようにフォント宣言を変更しても問題ありません。
特に困惑しているのは、スタック トレースがエラーの原因となったコード行を特定していないことです。