java - 单击独立于其余 jPanel 的按钮时创建一个新的相同 jPanel

标签 java swing

我正在尝试使用 jFrame 中的 jPanel 创建任务列表类型的小程序。 jPanel 具有文本输入 block 、 slider 、“完成任务”按钮和“清除任务”按钮等项目。我还有一个“添加任务”按钮,它将询问用户新任务的名称,然后创建具有相同配置的相同 jPanel。我的问题是,如何使用相同的按钮/ slider /输入框创建新的 jPanel,但每次单击“添加任务”按钮时这些按钮/ slider /输入框都有不同的变量名称?我尝试通过创建一个单独的方法来实现此目的,该方法采用随机数,将其转换为字符串,然后使用该字符串值作为新 jPanel 的名称...它给了我一个错误,提示“double 无法取消引用” 。

public void createNewTask(){
  double panelTask = Math.random();
  Double.toString(panelTask);

  javax.swing.GroupLayout panelTaskLayout = new javax.swing.GroupLayout(panelTask);
  panelTask.setLayout(panelTaskLayout);
  panelTaskLayout.setHorizontalGroup(
        panelTaskLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(panelTaskLayout.createSequentialGroup()
            .addContainerGap()
                .addGroup(panelTaskLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(panelTaskLayout.createSequentialGroup()
                    .addComponent(completeTask, javax.swing.GroupLayout.DEFAULT_SIZE, 259, Short.MAX_VALUE)
                    .addGap(18, 18, 18)
                    .addComponent(clearTask, javax.swing.GroupLayout.PREFERRED_SIZE, 103, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addComponent(inputText)
                .addComponent(sliderExample, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
            .addContainerGap())
    );
    panelTaskLayout.setVerticalGroup(
        panelTaskLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelTaskLayout.createSequentialGroup()
            .addContainerGap()
            .addComponent(inputText, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
            .addComponent(sliderExample, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(10, 10, 10)
            .addGroup(panelTaskLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                .addComponent(completeTask, javax.swing.GroupLayout.DEFAULT_SIZE, 71, Short.MAX_VALUE)
                .addComponent(clearTask, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
            .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    );
}

最佳答案

我不确定为什么您想要创建一个具有完全相同组件的全新面板,但我确实看到您几乎只是复制并粘贴了 GUI 构建器工具中自动生成的代码并尝试将其粘贴到方法中以重新创建面板。我自己从未尝试过,但它看起来就是错误的。

在没有澄清您的要求的情况下,我只是建议您使用 CardLayout 在 View 之间切换。您可以使用构建器工具创建一个 JPanel 表单,并使用相同的表单两次,每张卡片一次。您可以在How to Use CardLayout with NetBeans GUI Builder查看更多信息并参见How to Use CardLayout Oracle tutorial了解 CardLayout 所提供的基础知识。

或者也许,重用JDialog来获取Task的用户输入。

或者,更好的选择是让模型对象保存每个对象的状态(任务,或者其他什么,我不确定)。假设类 Task 保存字段和 slider 值的状态。或者只是使用 JTable 来保存每个任务的状态。

但实际上,我不认为两个相同的面板有什么意义。因此,请提供更多详细信息,说明为什么您需要两个相同的面板,以及它们提供哪些不同的功能,而您需要两个。

关于java - 单击独立于其余 jPanel 的按钮时创建一个新的相同 jPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23188305/

相关文章:

java - 如何获取 PropertyPlaceHolderConfigurer 中所有属性的列表?

java - 是否有网站可以远程上传mysql数据库并连接Java Swing应用程序

java - 如何访问在 java swing 中运行时实例化的对象的事件监听器

java - 检查是否选择了 JTextfield

java - 拦截传入消息并将其记录到端点

java - LWJGL 3 - 渲染文本

java - 根据用户输入打印菱形图案

java - 如何在 Java 中使用必填字段构建可重用的动态输入逻辑

java - 在同一个项目中使用 'javax.swing.Timer'和 'java.util.Timer'?

java - 具有可调整大小和固定大小标签的 Swing 布局