2015-09-17 2 views
0

Я новичок в программировании на Java.Как использовать несколько кнопок с несколькими jtextField

Я пытаюсь протестировать программу, где есть по крайней мере четыре (4) JButton и есть как минимум три (3) JTextField. Пусть говорят кнопки A, B, C и D, затем текстовое поле 1, 2 и 3.

Что я хочу, так это то, что: когда я нажимаю любую кнопку. Первое текстовое поле, допустим, будет содержать строковый текст. И когда я нажимаю другую кнопку, второе текстовое поле теперь удерживает строку, так как 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); 
     } 
    }); 
} 
+1

Покажите это, как решить эту проблему и проблемы, с которыми сталкиваетесь? – TNT

+0

Добро пожаловать в Stack Overflow, можете ли вы опубликовать графический интерфейс, который у вас есть? Поэтому мы можем помочь вам с логикой. На первый взгляд кажется простым. 'if (textField [i] .getText(). equals (" ")' затем записывать в него случайный текст AND 'counter [i] ++;', то же самое для всех остальных, в случае, если ни один из них не пуст, тогда проверьте нижний 'counter [i]' и напишите в него и снова увеличьте его на 1 – Frakcool

+0

@TNT: Я застрял. Я просто знаю, как поместить/установить текст в текстовое поле. , но в любом случае вот мой код для кнопка: "частная пустота jButton2ActionPerformed (java.awt.event.ActionEvent ЭВТ) { jTextField1.setText (" B ");} " Тогда проблема –

ответ

3

Пожалуйста, обратите внимание, что этот код был написан до того, как OP отправил свой код, но я думаю, что он все равно будет решить этот вопрос, и поэтому стоит ответ


Я только что создал пример который должен помочь вам в этом, он будет работать с любым количеством кнопок и текстовых полей (кроме < = 0).

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++; 
     } 
    } 

} 
+0

Большое спасибо Это то, что я хотел! : D. Теперь я буду применять эту логику и код для своей программы! :) –

+0

@ZeroSerum См. Мое последнее редактирование. Возможно, это также поможет вам с 'setText()'. –

+0

@ZeroSerum Btw, пожалуйста [примите] (http://meta.stackexchange.com/a/5235) ответ, который решил вашу проблему и был наиболее полезным. –

Смежные вопросы