我有一个Destination对象列表和一个类(DestinationsRenderer),它扩展Container并实现ListCellRenderer来呈现列表。列表中的每个单元格都有一个删除按钮,按钮类扩展了Button。
我想要做的是在按下时突出显示删除按钮的边框。我有两个主要问题:
我引用了this之前回答的问题,但这也没有解决第一个问题。
是否可能将列表操作侦听器添加到错误的位置?
以下是渲染器的代码段:
public DestinationsRenderer(final StateMachine stateMachine){
// other code initializing the buttons and labels
mDeleteButton.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent evt) {
if (mList.getSelectedIndex() < mStateMachine.getNumDestinations()) {
mIsDeleteSelected = true;
mStateMachine.deleteDestination(mList.getSelectedIndex());
}
}
}
}
public Component getListCellRendererComponent(final List list,
final Object value,
final int index,
final boolean isSelected){
// list of Destinations
if(mList != null){
mList.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt){
if(mIsDeleteSelected){
mIsDeleteSelected = false; // if i take out this line of code,
// all of the buttons get highlighted
// when i click,
// but if i leave it in, none of them do
Style style = mDeleteButton.getPressedStyle();
style.setBorder(Border.createLineBorder(1, 1416152));
mDeleteButton.setPressedStyle(style);
mDeleteButton.setUnselectedStyle(style);
mDeleteButton.setSelectedStyle(style);
mDeleteButton.setDisabledStyle(style);
} else {
Style style = mDeleteButton.getPressedStyle();
style.setBorder(Border.createEmpty());
mDeleteButton.setPressedStyle(style);
mDeleteButton.setUnselectedStyle(style);
mDeleteButton.setSelectedStyle(style);
mDeleteButton.setDisabledStyle(style);
}
}
});
}
mList = list;
// more code handling other list cell rendering stuff
}
答案 0 :(得分:1)
不断调用getListCellRendererComponent,将侦听器添加到该方法内的List是错误的。 我建议您更改为Container BoxLayout Y而不是List,处理Container上的按钮和事件会更容易