Caret
और selectAll
invokeLater
में लपेटकर के लिए बेहतर है, लेकिन JTextComponent
के लिए (आप कि JComboBox
भी से निकाले जाते हैं कर सकते हैं) आप आप उपयोग करना
चयन करना चाहते हैं तय करने के लिए है
या का उपयोग
संपादित
1) संपादन योग्य JComboBox
Runnable doRun = new Runnable() {
@Override
public void run() {
myComboBox.getEditor().setItem(0);
myComboBox.getEditor().selectAll();
myComboBox.requestFocus();
}
};
SwingUtilities.invokeLater(doRun);
2 के लिए) या से संपादन योग्य JComboBox
((JTextField) myComboBox.getEditor().getEditorComponent())
JTextField
या JFormattedTextField
निकाले जाते हैं तो जोड़ने FocusListener उदा
private FocusListener focsListener = new FocusListener() {
@Override
public void focusGained(FocusEvent e) {
dumpInfo(e);
}
@Override
public void focusLost(FocusEvent e) {
//dumpInfo(e);
}
private void dumpInfo(FocusEvent e) {
//System.out.println("Source : " + name(e.getComponent()));
//System.out.println("Opposite : " + name(e.getOppositeComponent()));
//System.out.println("Temporary: " + e.isTemporary());
final Component c = e.getComponent();
if (c instanceof JFormattedTextField) {
EventQueue.invokeLater(new Runnable() {
public void run() {
((JFormattedTextField) c).requestFocus();
((JFormattedTextField) c).setText(((JFormattedTextField) c).getText());
((JFormattedTextField) c).selectAll();
}
});
} else if (c instanceof JTextField) {
EventQueue.invokeLater(new Runnable() {
public void run() {
((JTextField) c).requestFocus();
((JTextField) c).setText(((JTextField) c).getText());
((JTextField) c).selectAll();
}
});
}
}
private String name(Component c) {
return (c == null) ? null : c.getName();
}
};
संपादित करें 2:
संपादन योग्य JComboBox के लिए SSCCE,
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import javax.swing.*;
public class ComboRendererTest {
public ComboRendererTest() {
JComboBox comboBox = new JComboBox();
comboBox.setPrototypeDisplayValue("XXXXXXXXXXXXXXXX");
comboBox.addItem(new Double(1));
comboBox.addItem(new Double(2.25));
comboBox.addItem(new Double(3.5));
comboBox.setRenderer(new TwoDecimalRenderer(comboBox.getRenderer()));
comboBox.setEditable(true);
JComboBox comboBox1 = new JComboBox();
comboBox1.setPrototypeDisplayValue("XXXXXXXXXXXXXXXX");
comboBox1.addItem(new Double(1));
comboBox1.addItem(new Double(2.25));
comboBox1.addItem(new Double(3.5));
comboBox1.setRenderer(new TwoDecimalRenderer(comboBox.getRenderer()));
comboBox1.setEditable(true);
JFrame frame = new JFrame();
frame.add(comboBox, BorderLayout.NORTH);
frame.add(comboBox1, BorderLayout.SOUTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) throws Exception {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
SwingUtilities.invokeLater(new Runnable() {
public void run() {
ComboRendererTest comboRendererTest = new ComboRendererTest();
}
});
}
}
class TwoDecimalRenderer extends DefaultListCellRenderer {
private ListCellRenderer defaultRenderer;
public TwoDecimalRenderer(ListCellRenderer defaultRenderer) {
this.defaultRenderer = defaultRenderer;
}
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
Component c = defaultRenderer.getListCellRendererComponent(
list, value, index, isSelected, cellHasFocus);
if (c instanceof JLabel) {
c.setBackground(Color.red);
} else {
c.setBackground(Color.red);
c = super.getListCellRendererComponent(
list, value, index, isSelected, cellHasFocus);
}
return c;
}
}
संपादित करें 3.
गंदा हैक हो सकता है
JTextComponent editor = ((JTextField) myComboBox.getEditor().getEditorComponent());
editor.setCaretPosition(getLength());
editor.moveCaretPosition(0);
इस कोड है कि मैं ऐसा नहीं कर रहा है चाहते हैं, यह सिर्फ जेकॉम्ब की सामग्री के लिए "0" सेट करें ओबॉक्स और इसे चुनें – Karen
मुझे नहीं पता कि आप क्या चाहते हैं, 'दस्तावेज़' से 'सेट कैरेट' केवल दो संभावित तरीके हैं या 'selectAll' का उपयोग करें, दोनों मामलों में' फोकस लिस्टर 'सुंदर असीमित है, फिर कोड को' invokeLater' – mKorbel
मैं संपादन योग्य JComboBox में सभी टेक्स्ट चुनना चाहता हूं और शुरुआत में कर्सर की स्थिति सेट करना चाहता हूं। – Karen