作成中の 4 つのボタンのセットが 2 つあります。
1ImageIcon
番目のボタン セットの を 2 番目のボタン セットにドラッグします。
ブールenab
変数は、4 つのボタンの 2 番目のセットが有効かどうかを決定するためのものです。最初にブール値を に設定しましたが、最初のボタン セットの がドラッグされたfalse
場合にのみ、値が に変わります。ImageIcon
enab
true
ただし、ボタンの 2 番目のセットは、画像をドラッグした後も無効のままです。
System.out.println ステートメントを挿入して、どこで問題が発生したかを確認しました。その結果、enab
変数は更新されましたが、stateChanged
メソッドはまったく実行されませんでした。
stateChanged
メソッドがリッスンするボタンが既に有効になっていることを検出する方法を取得するにはどうすればよいですか?
public class Test extends JFrame {
private boolean enab = false;
private JButton[] button = new JButton[4];
private JButton[] rg = new JButton[4];
private JPanel leftg;
private String id,id2;
private int cc,cc2;
private String name1;
private BufferedImage bi;
public Test(){
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// creates a new panel for the splitted puzzle pieces
leftg = new JPanel();
leftg.setLayout(new GridLayout(2,2));
leftg.setPreferredSize(new Dimension(600,400));
bi = new BufferedImage(200,133,BufferedImage.TYPE_INT_RGB);
// creates 4 buttons
for(int a=0; a<4; a++){
button[a] = new JButton(new ImageIcon(bi));
TransferHandler transfer = new TransferHandler("icon");
button[a].setTransferHandler(transfer);
//MouseListener ml = new MouseListener(){
//button[a].addMouseListener(ml);
button[a].addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e){
JButton button = (JButton)e.getSource();
TransferHandler handle = button.getTransferHandler();
handle.exportAsDrag(button, e, TransferHandler.COPY);
name1 = e.getComponent().getName();
System.out.println(name1);
enab = true;
System.out.println("enabled0:" + enab); // prints true
}
});
// adds the 4 buttons to panel
leftg.add(button[a]);
}
// adds leftg panel into the frame
this.add(leftg,BorderLayout.WEST);
// creates a new panel for the completed puzzle pieces
JPanel cp = new JPanel();
cp.setLayout(new GridLayout(2,2));
cp.setPreferredSize(new Dimension(600,400));
// creates another 4 buttons for stuff to be dragged to
for(int b=0; b<4; b++){
rg[b] = new JButton();
id2 += Integer.toString(++cc2);
// unique name for each button as an ID
rg[b].setName(id2);
TransferHandler transfer1 = new TransferHandler("icon");
rg[b].setTransferHandler(transfer1);
rg[b].setEnabled(enab);
System.out.println("enabled00:" + enab); // prints false
ChangeListener clistener = new ChangeListener(){
public void stateChanged(ChangeEvent ce) {
JButton source = (JButton)ce.getSource();
ButtonModel mod = source.getModel();
System.out.println("enabled1:" + enab); // no output
if (mod.isEnabled()){
System.out.println("enabled2:" + enab); // no output
if(name1 == source.getName()){
}
else{
source.setIcon(null);
}
}
else{
}
};
};
rg[b].addChangeListener(clistener);
// adds the 4 buttons to panel
cp.add(rg[b]);
}
// adds rg panel to frame
this.add(cp,BorderLayout.EAST);
this.pack();
this.setVisible(true);
this.setLocationRelativeTo(null);
}
public static void main(String[] args){
new Test();
}
}