JComboBox
편집기에 단추를 추가하는 데 막혔지만 버튼을 추가하는 데 성공했지만 편집자에게 처음 입력 할 때 수행 할 작업 수행 이벤트는 받아 들일 수없고 다른 하나는 텍스트를 입력 할 수 없습니다.사용자 정의 JComboBox 편집기
결과 :
문제 :
@Override
public Component getEditorComponent() {
return panel;
}
이 내가 panel.jtexfield
를 반환하는 경우 난 단지 버튼없이 텍스트 필드를 얻을 문제, 그래서 트릭은 여기에 무엇 ?
여기에 나는 또한 같은에 텍스트 글꼴 및 크기를 설정하고자하는 내 코드
import Store.util.DatabaseHelper;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.plaf.basic.BasicComboBoxEditor;
import org.hibernate.HibernateException;
import org.netbeans.lib.awtextra.AbsoluteLayout;
public class NewComboTest extends JFrame {
private ArrayList<Object> shopCart = new ArrayList<Object>();
private JComboBox cb;
private static final Object[] comboContents = {
"First", "Second", "Third", "Fourth", "Fifth"
};
public NewComboTest() {
super("New Combo Test");
setLayout(null);
cb = new JComboBox();
cb.setRenderer(new NewComboRenderer());
cb.setEditor(new NewComboEditor());
cb.setEditable(true);
cb.setSize(new Dimension(350, 100));
for (int i = 0; i < comboContents.length; i++) {
cb.addItem(comboContents[ i]);
}
cb.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("_____________" + cb.getSelectedItem());
shopCart.add(cb.getSelectedItem());
System.out.println("items added" + shopCart);
}
});
cb.getEditor().getEditorComponent().addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
System.out.println("KeyReleased" + cb.getEditor().getItem().toString());
populateModel(cb.getEditor().getItem().toString());
}
});
getContentPane().add(cb, new org.netbeans.lib.awtextra.AbsoluteConstraints(320, 200, 480, 50));
setSize(1200, 450);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] arg) {
new NewComboTest();
}
private class NewComboEditor extends JPanel implements ComboBoxEditor {
JTextField tf;
JButton eraseButton;
textPanel panel = new textPanel();
public NewComboEditor() {
}
@Override
public void addActionListener(ActionListener l) {
tf.addActionListener(l);
}
@Override
public Component getEditorComponent() {
return panel;
}
public Component getEditorComponent2() {
return panel;
}
@Override
public Object getItem() {
return tf.getText();
}
@Override
public void removeActionListener(ActionListener l) {
tf.removeActionListener(l);
}
@Override
public void selectAll() {
tf.selectAll();
}
@Override
public void setItem(Object o) {
if (o != null) {
tf.setText(tf.getText());
} else {
tf.setText("");
}
}
private class textPanel extends JPanel {
JTextField jTextField1 = new JTextField();
JButton jButton1 = new JButton();
public textPanel() {
setLayout(new BorderLayout());
jButton1.setBackground(new java.awt.Color(255, 255, 255));
jButton1.setForeground(new java.awt.Color(0, 51, 51));
jButton1.setText("X");
jButton1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jTextField1.setText("");
}
});
add(jTextField1, BorderLayout.CENTER);
add(jButton1, BorderLayout.EAST);
}
public String getText(){
return jTextField1.getText();
}
}
}
private class NewComboRenderer extends JLabel implements ListCellRenderer {
public NewComboRenderer() {
setOpaque(true);
}
public Component getListCellRendererComponent(
JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
setText(value.toString());
setBackground(isSelected ? Color.BLUE : Color.white);
setForeground(isSelected ? Color.white : Color.red);
return this;
}
}
/* public void populateModel(String text) throws HibernateException {
java.util.List l = DatabaseHelper.GetProductsBy(text);
for (Object object : l) {
cb.addItem(object);
}
ignore this its unnecessary.
*/
}
}
있는 콤보 상자에 설정합니다.
버튼과 textField를 패널에 추가 해봤습니까? 다른 문제는 textField가 기본적으로 포커스를 얻지 못한다는 것입니다. 나는 또한 핵심 청취자에 대해 우려하지만, 실제로 더 많은 것을 말할 수있게하기 위해 성취하고자하는 것에 대한 어떠한 맥락도 가지고 있지 않습니다. 당신은 또한 최신 SwingX에서 BuddySupport를 볼 수 있습니다.이 스윙은 텍스트 구성 요소 내에서 다른 구성 요소를 "버디 (buddy)"할 수 있습니다. – MadProgrammer
그들은 실제로 편집기에 내부 클래스 인 textPanel (버튼과 jtextfield)이 추가되었습니다. 난 편집기에 입력 한 모든 텍스트를 지우려면 버튼을 누르려고합니다. 텍스트를 입력하면 쿼리가 만들어집니다. – GoAntonio
사실, 질문을 통해 읽은 부분은 창에 있다고 생각하면 – MadProgrammer