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