DefaultListModel을 사용하는 jList가 있으며 목록에서 가져 오는 Objects로 채 웁니다 (컨텍스트 : ABM 시스템의 에이전트 유형).Java Swing jList의 항목에 대해 표시된 * 이름을 변경할 수 있습니까?
으로 표시된 이름을 변경하여 jList의 개체에 대해으로 표시 할 수 있습니까? 나는 이것에 무엇이든을 찾아 낼 수 있지 않았다 ...
DefaultListModel을 사용하는 jList가 있으며 목록에서 가져 오는 Objects로 채 웁니다 (컨텍스트 : ABM 시스템의 에이전트 유형).Java Swing jList의 항목에 대해 표시된 * 이름을 변경할 수 있습니까?
으로 표시된 이름을 변경하여 jList의 개체에 대해으로 표시 할 수 있습니까? 나는 이것에 무엇이든을 찾아 낼 수 있지 않았다 ...
:
래퍼 개념을 확장하려면 이것을 달성하는 것은 ListCellRenderer을 사용하는 것입니다. ListCellRenderer (실제로 모든 CellRenderer)는 목록에 각 객체를 그리는 데 사용되는 도장이라고 생각하십시오. 개체가 전달되면 구성 요소를 설정하고 구성 요소는 개체를 그리며 다음 개체로 이동합니다. CellRenderer에는 결코 상태가 없습니다. 이 예제를 고려하십시오 : 당신의 신속한 대답에 대한// Extend DefaultListCellRenderer, takes care of most of the work for you
public class ExampleListCellRenderer extends DefaultListCellRenderer
{
public Component getListCellRendererComponent(
JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
{
// I know DefaultListCellRenderer always returns a JLabel
// super setups up all the defaults
JLabel label = (JLabel)super.getListCellRendererComponent(list, value, index, isSelect, cellHasFocus);
// "value" is whatever object you put into the list, you can use it however you want here
// I'm going to prefix the label text to demonstrate the point
label.setText("PRE:" + label.getText());
return label;
}
}
// Some time later...
JList list = new JList();
list.setCellRenderer(new ExampleListCellRenderer());
나는 이름이 그 목표의 toString()
방법에 의해 일어난 ㄴ다는 것을 생각한다. 당신이 그것을 바꿀 수 있다면, 그것은 가장 쉽습니다. 그렇지 않으면 빠른 해결책은 JList에 대한 객체보기를 생성하고 실제로 조작해야 할 때 포함 된 객체를 쉽게 검색 할 수있는 객체 주위에 홀더 객체를 래핑하는 것입니다. 당신이 (토해내) 대신에 어떤 toString (의)를 참조 할 정보 자체, 가장 직접적인 "스윙"방법에 개체에 포함되어있는 경우
class FooBarAgentHolder {
// Simple javabean stuff
private FooBarAgent agent;
public FooBarAgentHolder(FooBarAgent agent) { this.agent = agent; }
public FooBarAgent getAgent() { return agent; }
// Produce the name for human consumption
public String toString() {
return agent.getDescriptiveName(); // Or whatever...
}
// Convenience conversion function
public static DefaultListModel makeListModel(List<FooBarAgent> list) {
DefaultListModel result = new DefaultListModel();
for (FooBarAgent agent: list)
result.addElement(new FooBarAgentHolder(agent));
return result;
}
}
감사합니다. 나는 원래의 객체 이름을 바꾸고 싶지 않다. 그래서 내가 알지 못하는 몇 가지 트릭이 없다면, 그 옵션이 문제가 아닌 것 같다. 두 번째 제안. 친절하게 확장 할 수 있습니까? 나는 이것에 대해 완전히 순진합니다. 예를 들어 매우 도움이 될 것입니다 ... – blackace
@blackace : 시도해보십시오. 그것은 분명히 옳은 것을 알 수있는 간단한 코드 여야합니다. 실제 코드에 맞게 수정하십시오 (예 :'FooBarAgent' 변경 및'toString'에 올바른 작업 수행). –
고마워요! 지금은 맑은 :-) – blackace
basszero listcellrenderers 및 제공 한 예제에 대한 귀하의 상세하고 유익한 설명 주셔서 감사합니다. 나는 많은 것을 배웠다 :) – blackace
@blackace - 대답 옆에있는 상자를 선택하여 그것을 수락하고 @basszero에게 점수를 준다. – I82Much
@ i82 내가받은 두 가지 대답이 정확합니다. 나는 그것을 어떤 식 으로든 나타낼 수 없는가? – blackace