2016-07-17 71 views
1

正如我之前描述我有Main Frame其中包含JXTaskPainContainerjPanel1jButton2AddButton這增加了動態btn。佈局給出here的JButton點擊一次

主類:

public class Main extends javax.swing.JFrame{ 
public static JXTaskPaneContainer taskPaneContainer; 
public static int count = 2; 

public Main() { 
    initComponents(); 

    taskPaneContainer = new JXTaskPaneContainer(); 
    jPanel1.setLayout(new GridLayout(1,1)); 
    jPanel1.add(taskPaneContainer, BorderLayout.EAST); 
} 

private void addMenu(String Title) { 
    final JXTaskPane actionPane = new JXTaskPane(); 
    actionPane.setSpecial(true); 
    JPanel opaquePanel = new JPanel(); 
    opaquePanel.setOpaque(true); 
    JButton btn = new JButton("Test"); 
    btn.setActionCommand(Integer.toString(count)); 
    cardLayoutPanel.add(new Test(count), "Test"+Integer.toString(count)); 

    opaquePanel.add(btn); 
    actionPane.add(opaquePanel); 
    taskPaneContainer.add(actionPane); 
} 

private void addButtonActionPerformed(java.awt.event.ActionEvent evt) {            
     count++; 
     addMenu("Menu " + count); 
} 

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { 
     Test.jButton1.doClick(); //call from Test panel 
} 
} 

這裏測試面板

public class Test extends javax.swing.JPanel{ 

/** 
* Creates new form Test 
* @param val 
*/ 

public Test(int val){ 
    initComponents(); 
    jButton1.setActionCommand(Integer.toString(val)); 
} 

public Test(){   
    initComponents(); 
} 

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt){ 
    System.out.println("test"+evt.getActionCommand()); 
} 
} 

現在,當我點擊jButton2Main frame我想從Test panel打電話jButton1並得到他們的actionCommand。當我們點擊addButton時,它會添加動態btn = new JButton("Test"),它指的是Test panel。我正在嘗試做的事情是添加動態btn,例如,如果我們添加btn2, btn3, btn4,,然後使用jButton2我想所有jButton1 actionCommands中的doClick()。在addButton所有的btn2, btn3, btn4jButton1的每次點擊被點擊一次然後

Test.jButton1.setActionCommand(Integer.toString(count)); 
Test.jButton1.doClick(); 

當我加入這行代碼中addMenu()。但是,當我想點擊使用jButton2所有jButton1Main frame

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { 
    Test.jButton1.setActionCommand(Integer.toString(count)); 
    Test.jButton1.doClick(); 
} 

但在這種情況下,只有最後jButton1點擊(即btn4)。 我想問一下,如何使用jButton2一次點擊所有動態添加的jButton1btn2, btn3, btn4? 任何幫助真的很感激。

+0

1)使用['AbstractButton.doClick()'](http://docs.oracle.com/javase/8/docs/api/javax/swing/AbstractButton.html#doClick--)2)對於b etter幫助更快,發佈[MCVE]或[簡短,獨立,正確示例](http://www.sscce.org/)。 –

+0

參見http://stackoverflow.com/help/someone-answers – c0der

回答

0

使用一個getter,而不是一個靜態調用 'Test.jButton1'

//include imports to make it an MCVE 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JPanel; 
public class Test extends javax.swing.JPanel{ 

    JButton jButton1; 

    public Test(int val){ 
     initComponents(); 
     jButton1.setActionCommand(Integer.toString(val)); 
    } 

    public Test(){   
     initComponents(); 
    } 

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt){ 
     System.out.println("test"+evt.getActionCommand()); 
    } 

    /** 
    * Add a getter, so you can get jButton1 
    */ 
    public JButton getjButton1() { 
     return jButton1; 
    } 
} 

如果JPANEL1是測試的一個實例,你可以得到的jButton1:

JButton jButton1 = jPanel1.getButton1(); 

,或送給

點擊
jPanel1.getButton1().doClick();