【问题标题】:jButton click at oncejButton一次单击
【发布时间】:2016-11-20 02:09:09
【问题描述】:

正如我之前描述的,我有Main Frame,其中包含JXTaskPainContainerjPanel1jButton2AddButton,它添加了动态btn。布局为here

主类:

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());
}
}

现在,当我在Main frame 上单击jButton2 时,我想从Test panel 调用jButton1 并获取他们的actionCommand。当我们单击addButton 时,它会添加动态btn = new JButton("Test") 并引用Test panel。我想做的是添加动态btn,例如,如果我们添加btn2, btn3, btn4,,然后使用jButton2,我想在所有jButton1 actionCommands 中添加doClick()

当我在addMenu()中添加这行代码时:

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

然后在每次点击addButton 时,所有jButton1btn2, btn3, btn4 都被一次点击。但是当我想在Main frame中使用jButton2点击所有jButton1时:

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

但在这种情况下,只有最后一个jButton1 被点击(即btn4)。 我想问一下,如何使用jButton2一次点击所有动态添加的jButton1btn2, btn3, btn4? 非常感谢任何帮助。

【问题讨论】:

标签: java swing button actionlistener


【解决方案1】:

使用 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 是 Test 的一个实例,您可以通过以下方式获取 jButton1:

    JButton jButton1 = jPanel1.getButton1();

或者让它被点击

jPanel1.getButton1().doClick();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 2022-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多