Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 调整组合框弹出窗口的大小_Java_Swing_Combobox_Popup_Resize - Fatal编程技术网

Java 调整组合框弹出窗口的大小

Java 调整组合框弹出窗口的大小,java,swing,combobox,popup,resize,Java,Swing,Combobox,Popup,Resize,我的过滤组合框中还有一个问题。我尝试使用setPreferredSize方法从组合框调整弹出窗口的大小。它工作正常,但底部的边框没有调整大小。我已经尝试添加新边框,但没有结果 如何调整组合框弹出窗口的大小 package de.ccw.reports.gui.incomingOrder.MyComboBox; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java

我的过滤组合框中还有一个问题。我尝试使用setPreferredSize方法从组合框调整弹出窗口的大小。它工作正常,但底部的边框没有调整大小。我已经尝试添加新边框,但没有结果

如何调整组合框弹出窗口的大小

    package de.ccw.reports.gui.incomingOrder.MyComboBox;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.BorderFactory;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JTextField;
import javax.swing.border.Border;
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;
import javax.swing.plaf.basic.BasicComboPopup;
import javax.swing.text.JTextComponent;

import de.ccw.commons.ui.comp.XComboBox;

public class FilterableComboBox<E> extends XComboBox<E> {

    ComboBoxModel<E> originalModel;
    DefaultComboBoxModel<E> filteredModel;

    JTextComponent editorComp;
    String filterBkp = "";
    JList<E> list;
    BasicComboPopup popup;

    public FilterableComboBox(ComboBoxModel<E> aModel) {
        super();
        // setEditor(new BasicComboBoxEditor());
        receivePopupList();
        originalModel = aModel;

        filteredModel = new DefaultComboBoxModel<>();
        setModel(filteredModel);

        editorComp = (JTextComponent) getEditor().getEditorComponent();
        editorComp.addFocusListener(new FocusAdapter() {

            @Override
            public void focusLost(FocusEvent e) {
                System.out.println("focusLostStart=" + getSelectedItem() + "|"
                        + editorComp.getText());

                String text = editorComp.getText();
                editorComp.setText("");
                setSelectedItem(null);

                if (list.getSelectedIndex() != -1 && text.isEmpty() == false) {
                    setSelectedIndex(list.getSelectedIndex());
                    editorComp.setText(getSelectedItem().toString());
                }

                System.out.println("focusLostEnd=" + getSelectedItem() + "|"
                        + editorComp.getText());
            }

            @Override
            public void focusGained(FocusEvent e) {
                System.out.println("focusGainedStart=" + getSelectedItem()
                        + "|" + editorComp.getText());
                E element = getSelectedItem();
                String text = editorComp.getText();
                performModelFilter(null);
                showPopup();
                setSelectedItem(element);
                editorComp.setText(text);
                filterBkp = text;
                editorComp.selectAll();
                System.out.println("focusGainedEnd=" + getSelectedItem() + "|"
                        + editorComp.getText());
            }

        });
        editorComp.addKeyListener(new KeyAdapter() {

            @Override
            public void keyTyped(KeyEvent e) {
            }

            @Override
            public void keyReleased(KeyEvent e) {

                if (e.getKeyCode() != KeyEvent.VK_DOWN
                        && e.getKeyCode() != KeyEvent.VK_UP) {
                    String filter = editorComp.getText();

                    System.out.println("keyReleased-" + filterBkp + filter);

                    if (filter.equals(filterBkp) == false)
                        refreshModel();

                    filterBkp = filter;
                } else {
                    editorComp.selectAll();
                }
            }

            @Override
            public void keyPressed(KeyEvent e) {
            }
        });

        setEditable(true);
    }

    @SuppressWarnings("unchecked")
    private void receivePopupList() {
        popup = (BasicComboPopup) getAccessibleContext()
                .getAccessibleChild(0);
        list = popup.getList();
        popup.addPopupMenuListener(new PopupMenuListener() {

            @Override
            public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
                validate();
            }

            @Override
            public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
                // TODO DB Auto-generated method stub

            }

            @Override
            public void popupMenuCanceled(PopupMenuEvent e) {
                // TODO DB Auto-generated method stub

            }
        });
    }

    private void refreshModel() {

        String filter = editorComp.getText();

        performModelFilter(filter);

        editorComp.setText(filter);

    }

    private void performModelFilter(String filter) {
        System.out.println("performModelFilter-" + filter);

        filteredModel.removeAllElements();

        for (int i = 0; i < originalModel.getSize(); i++) {
            E element = originalModel.getElementAt(i);
            String value = element.toString().toUpperCase();
            if (filter == null || value.contains(filter.toUpperCase())) {
                filteredModel.addElement(element);
            }
        }

        Dimension prefSize = new Dimension();
        prefSize.height = list.getPreferredSize().height+2;
        prefSize.width = getPreferredSize().width;
        popup.setPreferredSize(prefSize);
        popup.revalidate();
        popup.validate();
        popup.pack();
//      list.revalidate();
//      editorComp.revalidate();
//      revalidate();
        System.out.println("List=" + list.getPreferredSize());
        System.out.println("Popup=" + popup.getPreferredSize());
        System.out.println("ComboBox=" + getPreferredSize());
    }

    public static void main(String args[]) {
        FilterableComboBox<String> combo = new FilterableComboBox<>(
                new DefaultComboBoxModel<>(new String[] { "abc", "def", "ghi",
                        "jkl", "mnoabc", "pqrdef" }));

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new FlowLayout());
        frame.add(new JTextField(20));
        frame.add(combo);
        frame.add(new JTextField(20));
        frame.pack();
        frame.setVisible(true);
    }

}
package de.ccw.reports.gui.incomingOrder.mycombox;
导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.FlowLayout;
导入java.awt.event.FocusAdapter;
导入java.awt.event.FocusEvent;
导入java.awt.event.KeyAdapter;
导入java.awt.event.KeyEvent;
导入javax.swing.BorderFactory;
导入javax.swing.ComboxModel;
导入javax.swing.DefaultComboxModel;
导入javax.swing.JFrame;
导入javax.swing.JList;
导入javax.swing.JTextField;
导入javax.swing.border.border;
导入javax.swing.event.PopupMenuEvent;
导入javax.swing.event.PopupMenuListener;
导入javax.swing.plaf.basic.basicmbopopup;
导入javax.swing.text.JTextComponent;
导入de.ccw.commons.ui.comp.XComboBox;
公共类FilterableComboBox扩展了XComboBox{
ComboBoxModel原始模型;
DefaultComboxModelFilteredModel;
jtext组件编辑器comp;
字符串过滤器bKP=“”;
JList列表;
基本组件弹出窗口;
公共过滤器ComboxModel aModel(ComboxModel){
超级();
//setEditor(新的BasicComboxeditor());
receivePopupList();
原始模型=aModel;
filteredModel=新的DefaultComboxModel();
setModel(filteredModel);
EditorComponent=(JTextComponent)getEditor().getEditorComponent();
editorComp.addFocusListener(新的FocusAdapter(){
@凌驾
公共无效焦点丢失(焦点事件e){
System.out.println(“focusLostStart=“+getSelectedItem()+”|”
+editorComp.getText());
String text=editorComp.getText();
editorComp.setText(“”);
setSelectedItem(空);
if(list.getSelectedIndex()!=-1&&text.isEmpty()==false){
setSelectedIndex(list.getSelectedIndex());
editorComp.setText(getSelectedItem().toString());
}
System.out.println(“focusLostEnd=“+getSelectedItem()+”|”
+editorComp.getText());
}
@凌驾
获得公共无效焦点(焦点事件e){
System.out.println(“focusGainedStart=“+getSelectedItem()
+“|”+editorComp.getText());
E element=getSelectedItem();
String text=editorComp.getText();
performModelFilter(空);
showPopup();
setSelectedItem(元素);
编辑器comp.setText(文本);
filterBkp=文本;
editorComp.selectAll();
System.out.println(“focusgainedden=“+getSelectedItem()+”|”
+editorComp.getText());
}
});
editorComp.addKeyListener(新的KeyAdapter(){
@凌驾
public void keyTyped(KeyEvent e){
}
@凌驾
公共无效密钥已释放(密钥事件e){
如果(例如getKeyCode()!=KeyEvent.VK_向下
&&e.getKeyCode()!=KeyEvent.VK\u UP){
String filter=editorComp.getText();
System.out.println(“按键释放-”+filterBkp+filter);
if(filter.equals(filterBkp)==false)
刷新模型();
filterBkp=过滤器;
}否则{
editorComp.selectAll();
}
}
@凌驾
按下公共无效键(按键事件e){
}
});
可编辑设置(真);
}
@抑制警告(“未选中”)
私有void receivePopUpplist(){
popup=(BasicComboPopup)getAccessibleContext()
.getAccessibleChild(0);
list=popup.getList();
addPopupMenuListener(新的PopupMenuListener(){
@凌驾
public void弹出菜单将变为可见(弹出菜单事件e){
验证();
}
@凌驾
public void PopupMenu将变得不可见(PopupMenuEvent e){
//TODO DB自动生成的方法存根
}
@凌驾
公共无效popupMenuCanceled(PopupMenuEvent e){
//TODO DB自动生成的方法存根
}
});
}
私有模型(){
String filter=editorComp.getText();
performModelFilter(过滤器);
editorComp.setText(过滤器);
}
私有void performModelFilter(字符串筛选器){
System.out.println(“performModelFilter-”+过滤器);
filteredModel.removeAllElements();
对于(int i=0;i