【问题标题】:How to use multiple button with multiple jtextField如何使用具有多个 jtextField 的多个按钮
【发布时间】:2015-09-17 17:00:23
【问题描述】:

我是 Java 编程的新手。

我正在尝试测试至少有四 (4) 个 JButton 和至少三 (3) 个 JTextField 的程序。假设按钮 A、B、C 和 D,然后是文本字段 1、2 和 3。

我想要发生的是:当我点击任何按钮时。第一个文本字段,假设 1 将保存一个字符串文本。当我单击另一个按钮时,第二个 Textfield 现在将保存字符串,因为 1 已经保存了字符串文本。然而,棘手的部分是所有文本字段都包含一个字符串。当我再次单击按钮时,“文本字段 1”将从单击的按钮中被覆盖。然后2,循环将重复。

package testing;


public class NewJFrame extends javax.swing.JFrame {


public NewJFrame() {
    initComponents();
}

 private void initComponents() {

    jButton1 = new javax.swing.JButton();
    jButton2 = new javax.swing.JButton();
    jButton3 = new javax.swing.JButton();
    jButton4 = new javax.swing.JButton();
    jTextField1 = new javax.swing.JTextField();
    jTextField2 = new javax.swing.JTextField();
    jTextField3 = new javax.swing.JTextField();
    jTextField4 = new javax.swing.JTextField();

}                 

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
   jTextField1.setText("A");

}                                        

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    jTextField1.setText("B");
}                                        

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    jTextField1.setText("C");
}                                        

private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    jTextField1.setText("D");
}                                        


public static void main(String args[]) {

    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new NewJFrame().setVisible(true);
        }
    });
}

【问题讨论】:

  • 您能否展示您解决问题的尝试以及您面临的问题?
  • 欢迎来到 Stack Overflow,你能发布你的 GUI 吗?所以我们也许可以帮助你的逻辑。乍一看似乎很简单。 if (textField[i].getText().equals("") 然后在其中写入随机文本和 counter[i]++; ,其余的都相同,如果它们都不是空的,则检查最低的 counter[i] 并写入它并再次将其增加 1
  • @TNT:我被困住了。我只知道如何将文本放入/设置文本字段。但无论如何,这是我的按钮代码:“private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { jTextField1.setText("B"); }" 那么问题

标签: java swing jbutton jtextfield


【解决方案1】:

请注意,此代码是在 OP 发布他的代码之前编写的,但我认为它仍然可以解决问题,因此值得回答


我刚刚创建了一个可以帮助您解决此问题的示例,它适用于任意数量的按钮和文本字段(

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

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

public class Examplerino {

    ArrayList<JTextField> tfs = new ArrayList<JTextField>();
    ArrayList<JButton> bts = new ArrayList<JButton>();

    int counter = 0;

    int amountBts = 4;
    int amountTfs = 3;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Examplerino();
            }
        });
    }

    public Examplerino() {

        JFrame frame = new JFrame();
        frame.getContentPane().setLayout(new FlowLayout());

        // Add new buttons to bts
        for (int i = 0; i < amountBts; i++) {
            bts.add(new JButton("b" + (i + 1)));
        }

        // Add new textfields to tfs
        for (int i = 0; i < amountTfs; i++) {
            tfs.add(new JTextField(3));
        }

        // Add buttons with action listener to the frame
        for (JButton b : bts) {
            b.addActionListener(new ButtonActionListener());
            frame.getContentPane().add(b);
        }

        // Add textfields to frame
        for (JTextField tf : tfs) {
            tf.setEditable(false);
            frame.getContentPane().add(tf);
        }

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500, 500);
        frame.setVisible(true);

    }

    public class ButtonActionListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            if (counter >= tfs.size()) {
                counter = 0;
            }
            tfs.get(counter).setText(((JButton) e.getSource()).getText());
            counter++;
        }
    }

}

【讨论】:

  • 非常感谢!这就是我想要的! :D。现在我将为我的程序应用这个逻辑和代码! :)
  • @ZeroSerum 查看我的最新编辑 - 也许这也有助于您使用 setText()
  • @ZeroSerum 顺便说一句,请accept 解决您的问题并且最有帮助的答案。
  • 你最新的编辑好多了!真的很感谢!
  • 我已经接受了你的回答。但是,我目前的声誉很低。因此,当我的声誉上升时,我将被计算在内
猜你喜欢
  • 2019-02-23
  • 2020-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-24
  • 2012-05-02
  • 1970-01-01
相关资源
最近更新 更多