java - 在鼠标事件上添加 Java GUI 组件

标签 java user-interface dynamic

嘿,Stack Overflow 的 friend 们,

我一直在尝试让代码工作,我可以双击JList中的一个项目,它会在框架上的不同位置创建一个新的JList属于该类别的项目的所有对象名称的暂存(我猜这是无用的信息)。 但问题是,当我双击列表中的项目时,它会运行代码以将组件添加到 JFrame 中,但它从未显示出来,这是因为我正在使用鼠标事件吗在运行后构建它还是什么?

我的 Gui 类是:

public class MediaGUI extends JFrame

添加代码发生在这里

    _mediaList.addMouseListener(new MouseAdapter() {
        public void mouseClicked(MouseEvent event) {
            if (event.getClickCount() == 2) {
                CreateObjectPane(_mediaList.getSelectedValue().toString(););
            }
        }
    });

这里是构建代码,这个方法属于MediaGUI,所以这个。指的是 JFrame

 private void CreateObjectPane(String category)
 {
     /*=======================================================================
     * Create ther list on Objects that belong to each category
     * Also a scroll bar for the list
     *=======================================================================*/
    String objects[] = _mediaHandler.GetObjects(category);
    _mediaList = new JList(objects);
    _mediaList.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
    _mediaList.setLayoutOrientation(_mediaList.VERTICAL);
    _mediaList.setVisibleRowCount(-1);

    _mediaScrollPane = new JScrollPane(_mediaList);
    _mediaScrollPane.setPreferredSize(new Dimension(100,100));
    _mediaScrollPane.setAlignmentX(CENTER_ALIGNMENT);

    _mediaPanel = new JPanel();
    _mediaPanel.setLayout(new BoxLayout(_mediaPanel, BoxLayout.PAGE_AXIS));
    _mediaLabel = new JLabel("Media Objects");
    _mediaLabel.setLabelFor(_mediaList);

    _mediaPanel.add(_mediaLabel);
    _mediaPanel.add(Box.createRigidArea(new Dimension(0, 15)));
    _mediaPanel.add(_mediaScrollPane);
    _mediaPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));

    this.add(_mediaPanel, BorderLayout.CENTER);
}

您能提供的任何帮助都会很棒,如果需要更多解释,我很乐意要求它

最佳答案

来自documentation :

Note: If a component has been added to a container that has been displayed, 
validate must be called on that container to display the new component. 
If multiple components are being added, you can improve efficiency by 
calling validate only once, after all the components have been added.

其他一些提示:

  • 将 CreateObjectPane 重命名为 createObjectPane
  • 您使用什么布局管理器?尝试尝试一下,因为大多数时候新组件不会出现在您期望的位置。

关于java - 在鼠标事件上添加 Java GUI 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/792245/

相关文章:

java - 访问java中方法的返回值

java - 安装 JDK 和 JRE 时出现问题

c++ - 如何制作一个无边框的winform应用程序?

ios - 动态大小的 collectionView 单元导致可见性问题 - iOS

C++动态大小的静态数组益智游戏

java - 带有 Spring-Boot-Starter-Parent 的多模块 Maven 项目结构

java - 如何修复Android Studio中的 ‘gradle project sync failed basic functionality will not work properly’错误

unity-game-engine - <Unity> 我想在下拉菜单(TMP)的模板项标签处添加字体素材

javascript - toString().length 在一个有零且只有零的数字上总是返回 0

javascript - 字符串的动态组合