Java Swing按钮执行该功能的

Java Swing按钮执行该功能的,java,swing,jbutton,Java,Swing,Jbutton,我已经编写了一个java应用程序,它使用Netbeans 7.0.1及其内置gui builder完成了一些不同的事情。我遇到的问题是,屏幕上有一些供用户输入的文本字段。最初是一组字段和一个按钮,加起来最多10个。我还有一个删除按钮,可以删除一个字段。 因此,基本上按钮在面板中添加和删除jTextFields和JLabel 当我点击按钮时,似乎有一个延迟,所以我添加了一些System.out.prints,发现有时按钮会被按下,系统会打印它应该打印的内容,但只是忽略组件的添加/删除 这是一个已知

我已经编写了一个java应用程序,它使用Netbeans 7.0.1及其内置gui builder完成了一些不同的事情。我遇到的问题是,屏幕上有一些供用户输入的文本字段。最初是一组字段和一个按钮,加起来最多10个。我还有一个删除按钮,可以删除一个字段。 因此,基本上按钮在面板中添加和删除jTextFields和JLabel

当我点击按钮时,似乎有一个延迟,所以我添加了一些System.out.prints,发现有时按钮会被按下,系统会打印它应该打印的内容,但只是忽略组件的添加/删除

这是一个已知的问题吗?(我还没有找到任何东西,尽管我不能100%确定如何使用搜索词)或者我做错了什么

代码示例: 注意:当前组件是包含每个组件及其值的映射

private void addButtonMouseClicked(java.awt.event.MouseEvent evt) {                                       
    if(hiddenValue != 81) {
        currentComponents.get(hiddenValue).setVisible(true);
        currentComponents.get(hiddenValue + 1).setVisible(true);
        currentComponents.get(hiddenValue + 2).setVisible(true);
        currentComponents.get(hiddenValue + 3).setVisible(true);
        currentComponents.get(hiddenValue + 4).setVisible(true);
        currentComponents.get(hiddenValue + 5).setVisible(true);
        currentComponents.get(hiddenValue + 6).setVisible(true);
        currentComponents.get(hiddenValue + 7).setVisible(true);
        currentComponents.get(hiddenValue + 8).setVisible(true);
        hiddenValue =  hiddenValue + 10;
        numEntries++;
        removeButton.setVisible(true);
        removeButton.setEnabled(true);
        System.out.println(hiddenValue);
    }
    else {
        currentComponents.get(hiddenValue).setVisible(true);
        currentComponents.get(hiddenValue + 1).setVisible(true);
        currentComponents.get(hiddenValue + 2).setVisible(true);
        currentComponents.get(hiddenValue + 3).setVisible(true);
        currentComponents.get(hiddenValue + 4).setVisible(true);
        currentComponents.get(hiddenValue + 5).setVisible(true);
        currentComponents.get(hiddenValue + 6).setVisible(true);
        currentComponents.get(hiddenValue + 7).setVisible(true);
        currentComponents.get(hiddenValue + 8).setVisible(true);
        hiddenValue =  hiddenValue + 10;
        numEntries++;
        addButton.setVisible(false);
        addButton.setEnabled(false);
        System.out.println(hiddenValue);
    }
    }    

通过
索引调用
JComponents
(es)确实不是个好主意,也不知道为什么要重新发明轮子,请使用(避免任何
xxx异常


关于
JButtons action的类似示例对于
JPanel

中的所有
JComponents
执行,使用
索引调用
JComponents
(es)也不是一个好主意,也不是为什么要重新发明轮子,请使用(避免任何
xxx异常


关于
JButtons actionperformed
的类似示例,适用于
JPanel

中的所有
JComponents
,我在隐藏/显示组件方面没有问题:

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class TestVisibility {

    private class Pair<P1, P2> {
        public final P1 first;
        public final P2 second;

        public Pair(P1 first, P2 second) {
            this.first = first;
            this.second = second;
        }
    }

    private List<Pair<JLabel, JTextField>> pairs = new ArrayList<TestVisibility.Pair<JLabel, JTextField>>();

    protected void initUI() {
        JFrame frame = new JFrame("test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(new GridBagLayout());
        GridBagConstraints gbcLabel = new GridBagConstraints();
        gbcLabel.gridx = 0;
        gbcLabel.weightx = 0.0;
        gbcLabel.weighty = 0.0;
        gbcLabel.insets = new Insets(3, 3, 3, 3);
        GridBagConstraints gbcTF = new GridBagConstraints();
        gbcTF.gridx = 1;
        gbcTF.fill = GridBagConstraints.HORIZONTAL;
        gbcTF.weightx = 1.0;
        gbcTF.weighty = 1.0;
        gbcTF.insets = new Insets(3, 3, 3, 3);
        for (int i = 0; i < 10; i++) {
            gbcLabel.gridy = i;
            gbcTF.gridy = i;
            JLabel label = new JLabel("Field " + (i + 1) + ":");
            JTextField textField = new JTextField(50);
            label.setLabelFor(textField);
            Pair<JLabel, JTextField> pair = new Pair<JLabel, JTextField>(label, textField);
            pairs.add(pair);
            frame.add(label, gbcLabel);
            frame.add(textField, gbcTF);
        }
        JButton button = new JButton("Toggle");
        button.addActionListener(new ActionListener() {

            private boolean visible = true;

            @Override
            public void actionPerformed(ActionEvent e) {
                visible = !visible;
                boolean isOdd = false;
                for (Pair<JLabel, JTextField> pair : pairs) {
                    boolean oddVisible = isOdd || visible;
                    pair.first.setVisible(oddVisible);
                    pair.second.setVisible(oddVisible);
                    isOdd = !isOdd;
                }
            }
        });
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridy = 10;
        gbc.gridwidth = 2;
        gbc.anchor = GridBagConstraints.CENTER;
        frame.add(button, gbc);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new TestVisibility().initUI();
            }
        });
    }
}
导入java.awt.gridbag约束;
导入java.awt.GridBagLayout;
导入java.awt.Insets;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.util.ArrayList;
导入java.util.List;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JTextField;
导入javax.swing.SwingUtilities;
公共类TestVisibility{
私有类对{
公开决赛第一名;
公开决赛2秒;
公共对(P1第一,P2第二){
this.first=first;
这个秒=秒;
}
}
私有列表对=新的ArrayList();
受保护的void initUI(){
JFrame=新JFrame(“测试”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(新的GridBagLayout());
GridBagConstraints gbcLabel=新的GridBagConstraints();
gbcLabel.gridx=0;
gbcLabel.weightx=0.0;
gbcLabel.weighty=0.0;
gbcLabel.insets=新的插图(3,3,3,3);
GridBagConstraints gbcTF=新的GridBagConstraints();
gbcTF.gridx=1;
gbcTF.fill=GridBagConstraints.HORIZONTAL;
gbcTF.weightx=1.0;
gbcTF.weighty=1.0;
gbcTF.insets=新的插图(3,3,3,3);
对于(int i=0;i<10;i++){
gbcLabel.gridy=i;
gbcTF.gridy=i;
JLabel标签=新的JLabel(“字段”+(i+1)+“:”;
JTextField textField=新的JTextField(50);
label.setLabelFor(文本字段);
配对=新配对(标签,文本字段);
配对。添加(配对);
框架。添加(标签,gbcLabel);
frame.add(textField,gbcTF);
}
JButton按钮=新JButton(“切换”);
addActionListener(新建ActionListener()){
私有布尔可见=真;
@凌驾
已执行的公共无效操作(操作事件e){
可见=!可见;
布尔值isOdd=false;
for(成对:成对){
布尔oddVisible=isOdd | | visible;
pair.first.setVisible(oddVisible);
第二对setVisible(oddVisible);
isOdd=!isOdd;
}
}
});
GridBagConstraints gbc=新的GridBagConstraints();
gbc.gridy=10;
gbc.gridwidth=2;
gbc.anchor=GridBagConstraints.CENTER;
框架。添加(按钮,gbc);
frame.pack();
frame.setVisible(true);
}
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(新的Runnable(){
@凌驾
公开募捐{
新建TestVisibility().initUI();
}
});
}
}

你应该考虑用

< P>更新帖子,我没有隐藏/显示组件的问题:

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class TestVisibility {

    private class Pair<P1, P2> {
        public final P1 first;
        public final P2 second;

        public Pair(P1 first, P2 second) {
            this.first = first;
            this.second = second;
        }
    }

    private List<Pair<JLabel, JTextField>> pairs = new ArrayList<TestVisibility.Pair<JLabel, JTextField>>();

    protected void initUI() {
        JFrame frame = new JFrame("test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(new GridBagLayout());
        GridBagConstraints gbcLabel = new GridBagConstraints();
        gbcLabel.gridx = 0;
        gbcLabel.weightx = 0.0;
        gbcLabel.weighty = 0.0;
        gbcLabel.insets = new Insets(3, 3, 3, 3);
        GridBagConstraints gbcTF = new GridBagConstraints();
        gbcTF.gridx = 1;
        gbcTF.fill = GridBagConstraints.HORIZONTAL;
        gbcTF.weightx = 1.0;
        gbcTF.weighty = 1.0;
        gbcTF.insets = new Insets(3, 3, 3, 3);
        for (int i = 0; i < 10; i++) {
            gbcLabel.gridy = i;
            gbcTF.gridy = i;
            JLabel label = new JLabel("Field " + (i + 1) + ":");
            JTextField textField = new JTextField(50);
            label.setLabelFor(textField);
            Pair<JLabel, JTextField> pair = new Pair<JLabel, JTextField>(label, textField);
            pairs.add(pair);
            frame.add(label, gbcLabel);
            frame.add(textField, gbcTF);
        }
        JButton button = new JButton("Toggle");
        button.addActionListener(new ActionListener() {

            private boolean visible = true;

            @Override
            public void actionPerformed(ActionEvent e) {
                visible = !visible;
                boolean isOdd = false;
                for (Pair<JLabel, JTextField> pair : pairs) {
                    boolean oddVisible = isOdd || visible;
                    pair.first.setVisible(oddVisible);
                    pair.second.setVisible(oddVisible);
                    isOdd = !isOdd;
                }
            }
        });
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridy = 10;
        gbc.gridwidth = 2;
        gbc.anchor = GridBagConstraints.CENTER;
        frame.add(button, gbc);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new TestVisibility().initUI();
            }
        });
    }
}
导入java.awt.gridbag约束;
导入java.awt.GridBagLayout;
导入java.awt.Insets;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.util.ArrayList;
导入java.util.List;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JTextField;
导入javax.swing.SwingUtilities;
公共类TestVisibility{
私有类对{
公开决赛第一名;
公开决赛2秒;
公共对(P1第一,P2第二){
this.first=first;
这个秒=秒;
}
}
私有列表对=新的ArrayList();
受保护的void initUI(){
JFrame=新JFrame(“测试”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(新的GridBagLayout());
GridBagConstraints gbcLabel=新的GridBagConstraints();
gbcLabel.gridx=0;
gbcLabel.weightx=0.0;
gbcLabel.weighty=0.0;
gbcLabel.insets=新的插图(3,3,3,3);
GridBagConstraints gbcTF=新的GridBagConstraints();
gbcTF.gridx=1;
gbcTF.fill=GridBagConstraints.HORIZONTAL;
gbcTF.weightx=1.0;
gbcTF.weighty=1.0;
gbcTF.insets=新的插图(3,3,3,3);
对于(int i=0;i<10;i++){
gbcLabel.gridy=i;
gbcTF.gridy=i;
JLabel标签=新的JLabel标签