패널의 여러 텍스트 필드 각각에 가운데 맞춤을 적용하고 포커스를 얻었을 때 전체 필드를 선택하는 포커스 수신기를 갖기를 원합니다. 여러 텍스트 필드에서 포커스를 가져올 때 전체 텍스트를 선택합니다.
txtSelection = new JTextField("", 9);
txtInclusion = new JTextField("", 9);
txtExclusion = new JTextField("", 9);
...
나는 하나 그것을 하나를 수행하는 방법을 알고 :
txtSelection.setHorizontalAlignment(JTextField.CENTER);
txtSelection.addFocusListener(new FocusAdapter() {
public void focusGained(FocusEvent e) {
txtSelection.select(0, 9);
}
});
그러나 는 차라리 모든 텍스트 필드에 그 구조를 반복하지 것입니다.
나는이 시도 (및 품종의 커플)하지만 코드는 아무것도 할 수없는 것 :pnlConditions = new JPanel();
pnlConditions.setLayout(new GridBagLayout());
for(final Component c : pnlConditions.getComponents()) // compiler insisted on 'final'
{
((JTextField)c).setHorizontalAlignment(JTextField.CENTER);
if(c instanceof JTextField)
{
c.addFocusListener
(new FocusAdapter()
{
@Override public void focusGained(FocusEvent e)
{
((JTextField)c).select(0,9); // compiler suggested cast to JTextComponent; no difference
}
}
);
}
}
는 전체 필드가 선택되지 않습니다; 정렬이 그대로 유지됩니다 (기본값). 컴파일러가 c
은 for
에 final
이어야하고 그 캐스트는 select
과 같은 진술로 JTextComponent
에 있어야한다고 주장하고 있습니다. 그러나 그 진술에 대한 제안은 setHorizontal...
으로하지 않았다.
이 작업을 수행 할 수 있습니다. 그러나 어떻게?
여기서 위의 조각을 포함하는 전체 방법의 첫째는 빈 배열을 반환 JPanel
그렇지 pnlConditions.getComponents()
에 구성 요소를 추가
static void makePnlConditions(){
JLabel lblSelections = new JLabel("Select ONLY combos with ALL of:");
JLabel lblInclusions = new JLabel("DE-select combo NOT containing one or more of:");
JLabel lblExclusions = new JLabel("DE-select combo containing ANY of:");
txtSelection = new JTextField("", 9);
txtInclusion = new JTextField("", 9);
txtExclusion = new JTextField("", 9);
pnlConditions = new JPanel();
pnlConditions.setLayout(new GridBagLayout());
for(final Component c : pnlConditions.getComponents())
{
((JTextField)c).setHorizontalAlignment(JTextField.CENTER);
if(c instanceof JTextField)
{
c.addFocusListener
(new FocusAdapter()
{
@Override public void focusGained(FocusEvent e)
{
((JTextField)c).select(0,9);
}
}
);
}
}
pnlConditions.add(lblSelections);
pnlConditions.add(txtSelection);
pnlConditions.add(lblInclusions);
pnlConditions.add(txtInclusion);
pnlConditions.add(lblExclusions);
pnlConditions.add(txtExclusion);
}
@Braj --- 감사합니다! 필드에 패널을 추가하기 전에 필드를 완료해야한다는 명백한 오해가 당신이 분명히 한 일을 못하게했습니다. 그게 전부입니다. 나는 또한 당신에게'selectAll'에 관해 나에게 조언 해 주신 점에 감사드립니다. 'select (0,9)'가 효율적이지는 않지만 작업을 수행하기는하지만 나는 그 사실도 놓쳤다. – DSlomer64
@ Braj - FYI - 내가 요청한 작업을 수행하기 위해'centerAndSelect (JPanel p)'메소드를 만들었습니다. 나는이 프로그램의 두 개의 다른 장소에서 그것을 호출하고 그것을 (아마도 그것을 확장) 여기에 많이 사용하는 것, 내 생각! (JTextField 확장에 대한 답변의 두 번째 부분이 있다는 것을 깨달았습니다 ...그걸 연구해야 해.) ... (그냥 했어! COOL!) – DSlomer64
네, 일반화하기위한 방법이 많이 있습니다. 1.) 공통 코드를 이동하는 별도의 메소드를 작성하십시오. 2) 제안 된대로 사용자 정의 클래스를 작성하십시오. 현재 응용 프로그램 설계 및 코딩에 따라 더 쉬운 것을 선택하십시오. – Braj