簡體   English   中英

單擊獨立於其余jPanel的按鈕時,創建一個新的相同jPanel

[英]Creating a new identical jPanel when clicking a button that is independent from the rest of the jPanels

我正在嘗試在jFrame中使用jPanel創建小程序的任務列表類型。 jPanel具有諸如文本輸入塊,滑塊,“完成任務”按鈕和“清除任務”按鈕之類的項目。 我還有一個“添加任務”按鈕,它將詢問用戶新任務的名稱,然后使用相同的配置創建相同的jPanel。 我的問題是,我如何使用相同的按鈕/滑塊/輸入框創建新的jPanel,但是每次單擊“添加任務”按鈕時它們具有不同的變量名? 我試圖通過創建一個采用隨機數的單獨方法,將其轉換為字符串,然后使用該字符串值作為新jPanel的名稱來執行此操作,這給我一個錯誤,指出“無法取消引用雙精度” 。

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 Builder工具的自動生成的代碼,然后嘗試將其粘貼到一種重新創建面板的方法。 我自己從未嘗試過,但是看起來很不對勁。

在不明確您的要求的情況下,我只建議您使用CardLayout在視圖之間切換。 您可以使用構建器工具創建一個JPanel表單,並使用同一表單兩次,每張卡一次。 您可以在如何與NetBeans GUI Builder 一起使用CardLayout以及在如何使用CardLayout Oracle教程中了解更多有關CardLayout必須提供的基礎知識。

或者,也許可以重用JDialog來獲取Task用戶輸入。

或者,也許相反,更好的選擇是讓模型對象保存每個對象的狀態(任務或其他不確定的對象)。 說出類Task ,其中包含字段和滑塊值的狀態。 或者只是使用JTable來保存每個任務的狀態。

但實際上,我看不到兩個相同的面板的意義。 因此,請提供更多詳細信息,說明為什么需要兩個相同的面板,以及它們需要提供兩個不同的功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM