要素(描画された長方形や楕円)をArrayListに格納するグラフ描画プログラムに問題があります。リストから特定の矩形と楕円を削除するには、最初にマウスの左ボタンで要素を選択し、次に右マウスボタンを使用して要素を削除します。しかし、問題は、私のプログラムがマウスの左ボタンで選択されていない矩形または楕円を削除することです(つまり、ノードを右クリックして選択する前に削除します)。Java:ArrayListから要素を削除してテキストを追加する
は私がMousePressListenerインサイド
ArrayList <GraphElement> element = new ArrayList<GraphElement>();
、あると私は難しさを持ってい一環としてGraphElementsのArrayListのを宣言している(コードのsetLabel部分は、私の次の質問に関連している):
for (int i = 0; i < element.size(); i++)
{
GraphElement el = (GraphElement)element.get(i);
el.isSelected(x, y); // isSelected method (functioning correctly) to check whether the coordinates are inside the bounds of the rectangle or ellipse
if (el.isSelected(x,y))
{
if (event.getButton() == MouseEvent.BUTTON3) // delete a node
element.remove(i).isSelected(x, y);
if (setLabel)
{
el.setLabel(label);
setLabel = false;
repaint();
}
}
}
第2に、選択した矩形または楕円にラベルを追加したいと思います。これは私のプログラムでは、テキストを追加する矩形または楕円を選択し、JTextFieldにテキストを入力してから、変更を適用するためにJButtonを選択することによって行われます。しかし、私の問題は、JButtonを押した後にラベルがコンポーネント上に描画されないということです。テキストを表示するには、もう一度マウスボタンを押す必要があります。私はそれが私のMousePressListenerにsetLabelを持っているからだと思います。しかし、テキストを追加する前に要素を選択する必要があるので、これについてどうやって行くのか分かりません。私は任意の助けに感謝
class addLabel implements ActionListener {
public void actionPerformed(ActionEvent e)
{
component.setLabel(labelField.getText());
}
}
addLabel label = new addLabel();
labelButton.addActionListener(label);
:ここ
は、ラベルのActionListenerです。ありがとうございました。
ArrayListから項目を削除するには、Iterator.remove()メソッドを使用する必要があります。 [collections](http://docs.oracle.com/javase/tutorial/collections/interfaces/collection.html)を参照してください。 – tenorsax
または、ArrayListを逆方向に反復処理します。これは、クリックが前方にある項目をアクティブにするため、前方を反復して項目を描画すると実際に意味があります。 –
@Max - これはOPの本当の問題ではなく、コレクションはArrayListなので、パフォーマンス上の違いはほとんどありません。 –