我有一個項目處理三個使用jbuttons填充的面板。 jbuttons是從一個for循環創建的,我懶得重新創建一個jpanel填充了jbuttons的類,因爲它與我的actionlisteners衝突。 可以說我有每個三塊板填入代碼:確定從for循環創建的數組中的對象
JPanel panel109 = new JPanel(); //113, 115 for the other two
roomPanel.add(panel109);
for(int j = 0; j < 6*28; j++) {
btn[j] = new JButton();
btn[j].setName("a" + j);
btn[j].setBackground(Color.white);
btn[j].setText("");
btn[j].setPreferredSize(new Dimension(35,9));
btn[j].addActionListener(this);
panel109.add(btn[j]);
}
對於每個面板,如何識別每個BTN []創造的呢?我想在用戶指定數據以更改按鈕顏色,工具提示文本等之後序列化每個按鈕。我幾乎只想知道如何訪問我創建的按鈕,因爲三個面板使用相同的循環。 所有按鈕的序列化來自「存儲」按鈕,然後「恢復」如果我想從它創建的文件恢復。
店內碼:
JButton btnStore = new JButton("Store");
btnStore.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ObjectOutputStream out = null;
try {
out = new ObjectOutputStream (new FileOutputStream("myFile"));
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
for (int i=0;i<6*28;i++){
//deregister
btn[i].removeActionListener(this);//Heres my problem,
//serialize //I Don't know how to access
try { //the buttons created from the
out.writeObject(btn[i]); //three loops.
} catch (IOException e1) {
e1.printStackTrace();
}
try {
out.flush();
} catch (IOException e1) {
e1.printStackTrace();
}
//register
btn[i].addActionListener(this);
}
}
});
首先你應該http://stackoverflow.com/mcve你的例子,第二如果你使用單選按鈕,然後使用JRadioButton()...你也可以使用https://docs.oracle.com/javase /tutorial/uiswing/examples/components/index.html#ListDialog作爲一個開始的例子,因爲你正在挑選整個按鈕主機 –
哎呀,我搞砸了什麼類型的按鈕 – kfloresmx5
@ kfloresmx5你正在訪問'JButton [] btn'在ActionListener裏面,我們猜它是一個類成員(還是一個「final」局部變量)?除非爲每個容器創建一個新數組,否則不能將同一對象添加到多個容器('JPanel')。這些變量的範圍很重要,特別是當你想要將它們檢索到別處時... – Matthieu