小编use*_*252的帖子

JComboBox与GroupLayout不兼容

JComboBox组件放入一个内部时,我遇到了一种奇怪的行为GroupLayout.我已经减少了代码到下面小例子,正好特色的一个JComboBox奠定了通过GroupLayout.

观察到的行为如下:

  • 当框架小于展开的组合框列表(带有虚拟条目a,b,c)时,单击组合框上的小向下箭头会正确打开它.
  • 当我将框架的大小调整为大于扩展的组合框列表时,扩展的组合框列表不会打开!

我已经发现了什么:

  • 当JComboBox的父窗口太小时,javax.swing.PopupFactory会创建一个HEAVY_WEIGHT_POPUP组件.
  • 当父窗口足够大时,正在创建LIGHT_WEIGHT_POPUP.
  • 这种行为肯定与GroupLayout或它的一些副作用有关,因为我试过的任何其他布局管理器工作得很好.
  • 在GroupLayout中使用addGap()时,问题会发生一些变化,即JComboBox未显示更改的窗口大小.

这是示例代码 - 欢迎提出意见:

import java.awt.BorderLayout;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JRootPane;

public class DummyUI_cbdiagnosis extends javax.swing.JPanel {
    private javax.swing.JComboBox cbCategory;

    public DummyUI_cbdiagnosis() {
        initComponents();
    }

    private void initComponents() {
        cbCategory = new JComboBox();
        cbCategory.setModel(new javax.swing.DefaultComboBoxModel(new String[] {
                "a", "b", "c" }));

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(layout.createParallelGroup(
                javax.swing.GroupLayout.Alignment.LEADING).addGroup(
                layout.createSequentialGroup().addComponent(cbCategory,
                        javax.swing.GroupLayout.PREFERRED_SIZE,
                        javax.swing.GroupLayout.PREFERRED_SIZE,
                        javax.swing.GroupLayout.PREFERRED_SIZE)));
        layout.setVerticalGroup(layout.createParallelGroup(
                javax.swing.GroupLayout.Alignment.LEADING).addGroup(
                layout.createSequentialGroup().addComponent(cbCategory)
        ));
    }

    public static void main(String[] args) …
Run Code Online (Sandbox Code Playgroud)

java swing jcombobox

3
推荐指数
1
解决办法
464
查看次数

标签 统计

java ×1

jcombobox ×1

swing ×1