내가 학교에서해야하는 프로젝트에 얽매여 있습니다.Java ListCellRenderer 및 JList : 핸들 선택
"단순한"UI를 위해 JList
사용자 지정을 만들려고했습니다. 사용 사례는 주문 목록을 표시해야하며 사용자는 하나를 선택하고 두 개의 단추를 눌러 읽거나 마쳤 으면 설정해야합니다 (읽기 그리고 done) "unsetters"(나는 t, f, t, f를 계속 쓰는 Order 클래스에서 2 개의 부울을 사용하고 있습니다.). 일단 Done 버튼을 누를 때까지 선택된 행은 녹색으로 변하고 그 색에 영구히 남아 있어야합니다. Order 클래스의 "is_read"플래그와 관련하여 선택된 행을 영구히 노란색으로 바꿔야하는 버튼 "Read"와 동일합니다. 내 문제는 한 번 내 테스트 파일을 실행,
public class CookListCellRender extends JLabel implements ListCellRenderer<Order>{
public CookListCellRender(){
setOpaque(true);
}
@Override
public Component getListCellRendererComponent(JList<? extends Order> list, Order value, int index, boolean isSelected, boolean cellHasFocus) {
setLayout(new FlowLayout());
setText(value.getNameEl());
list.setVisibleRowCount(30);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
setFont(new Font("Arial",Font.ITALIC,17));
if (isSelected) {
setBackground(Color.BLUE);
setForeground(Color.BLUE);
} else {
setBackground(getBackground());
setForeground(getForeground());
}
if(value.getOrderRead()){
setBackground(Color.YELLOW);
}else{
setBackground(Color.WHITE);
}
if(value.getOrderDone()){
setBackground(Color.GREEN);
}else{
setBackground(Color.WHITE);
}
return this;
}
}
입니다
, 모든 것이 제대로 팝업하지만 행을 선택했을 때 그 둘 중 하나를 누릅니다일부 관련 게시물을 읽은 후, 나는이 정의 ListCellRenderer
을 썼다 버튼은 새로운 행을 선택할 때까지는 아무 일도 일어나지 않습니다. 내가 선택한 행의 색상을 녹색 또는 노란색으로 바꿉니다.
저는 이것이 내 사용자 정의 셀 렌더러와 관련된 문제이며, 여전히 사용법을 배우고 있기 때문에 꽤 혼란 스럽습니다.
여기 UI의 나머지 관련 코드가 있습니다. 아마도 유용 할 것입니다. ... 버튼과 청취자는 별도의 클래스 (사용자 정의 JPanel
)에 있지만, 잘 작동 사람들은, 그래서
클래스 (직접 내 테스트 클래스에 의해 호출) InitGraphics
:이
public class InitGraphics {
Cook c;
JList list;
public InitGraphics(Cook cuoco){
c=cuoco;
initUi();
}
private void initUi() {
JFrame frame = new JFrame("Cucina");
list =new JList(c.getOrdersCopy().toArray());
list.setCellRenderer(new CookListCellRender());
JScrollPane panel = new JScrollPane(list);
panel.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
panel.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
ButtonPanel buttonPanel = new ButtonPanel(c.getOrdersCopy(),list);
buttonPanel.setLayout(new FlowLayout());
frame.add(buttonPanel,BorderLayout.NORTH);
frame.add(panel,BorderLayout.CENTER);
frame.setVisible(true);
frame.setSize(600, 400);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}
을 읽을 수있어, 더 나는 ** ** 작성할를 촉구하지 않으며 (HTTP를 유효한 [sscce]를 게시 : // sscce.org). 심각하고 즉각적인 도움이 필요한 경우. 그렇지 않으면 코드가 우리에게 쓸모가 없으며 문제를 이해하는 데 한계가 있습니다. –
예를 들면 : 우리 중 누구도이 코드를 컴파일하거나 실행할 수 없습니다.우리는 전체 프로그램을 보거나 문제와 관련없는 많은 양의 코드를보고 싶지 않지만 컴파일되지 않고 우리를 위해 컴파일되고 실행되는 가장 작은 예제로 코드를 압축 할 수 있다면 문제가 있음을 보여줍니다. 코드 형식의 텍스트로 질문에 게시 할 수있을만큼 작기 때문에 문제를 아주 빨리 해결할 수 있습니다. –
죄송합니다, 인터넷에 연결되지 않았습니다. Btw 나는 전에 sce에 대해 들어 본 적이 없지만 나는 ... 나는 140 선의 코드를 가지고있다. 나는 매우 적합하다고 생각하지 않지만 그의 직업은 훌륭하다고 생각한다. "자바 베테랑"이 아니므로 최선을 다했는데 이미 게시 된 코드를 편집하지 않으려면 [pastebin] (http://pastebin.com/QUP0v8ke)을 사용하십시오. – A7X