2016-12-07 4 views
0

Я пытаюсь создать текстовые поля в кадре, получив ввод во время выполнения. Является ли это возможным? Или мне нужно создать для этого еще один фрейм. Я пробовал этот код, но он не работает. Пожалуйста, помогите мне, и скажите мне, что не так с этим кодом.Добавить текстовые поля в Jframe в Runtime

import java.awt.BorderLayout; 
import java.awt.LayoutManager; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

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

public class Check extends JFrame implements ActionListener 
{ 
JTextField txtqty; 
JTextField[] tfArr; 
JPanel p1,p2; 
JButton bsmbt; 

public Check() 
{ 
    GUIDesign(); 
} 

public void GUIDesign() 
{ 
    p1 = new JPanel(); 
    txtqty = new JTextField(10); 
    JButton bsmbt= new JButton("OK"); 
    p1.add(txtqty); 
    p1.add(bsmbt); 

    p2=new JPanel(); 
    p2.setLayout(null); 
    add(p1,BorderLayout.NORTH); 
    setSize(500, 500); 
    setVisible(true); 
    setLocation(100, 100); 

    bsmbt.addActionListener(this); 




} 

public static void main(String[] args) 
{ 
    new Check(); 
} 

public void TFArray(JTextField[] temp) 
{ 
    int x,y,width,height; 
    x=10;y=30;width=50;height=20; 
    int no_of_textboxes = Integer.parseInt(txtqty.getText()); 
    temp=new JTextField[no_of_textboxes]; 

    for(int i=0;i<no_of_textboxes;i++) 
    { 
     temp[i]= new JTextField(10); 
     temp[i].setBounds(x, y, width, height); 
     x+=(width+10); 
     p2.add(temp[i]); 

    } 
    add(p2); 

} 

@Override 
public void actionPerformed(ActionEvent ae) { 

     JOptionPane.showMessageDialog(this, txtqty.getText()); 
     TFArray(tfArr); 
} 


} 

-> Метод TFArray() не работает.

+3

Какая часть не работает? Каков результат, который вы получаете? Чем он отличается от того, что вы хотите? Нам нужно больше видимости, друг! – KyleKW

+0

Этот код показывает только одно текстовое поле с одной кнопкой, которую я создал выше в панели1 в методе GUIDesign(). Я хотел создать так много текстовых полей, заданных на вкладке. но этот код не работает. – kikkaz69

+1

1) имена методов public void TFArray' должны быть lowerCamelCase, 2) 'extends JFrame' вместо JFrame не расшифровывается, если вам нужно что-то расширять, расширяться из' JPanel' и создавать экземпляр 'JFrame'. 3) 'JButton bsmbt = new JButton (« ОК »);« Вы знаете, что ваша глобальная переменная 'JButton bsmbt;' не используется из-за этой строки?? 4) Какая часть точно не работает? – Frakcool

ответ

3

У вас есть много ошибок в коде:

  1. public void TFArray(JTextField[] temp): имена методов должны начинаться с lowerCamelCase

  2. Вы простирающийся JFrame, вы не должны распространяться JFrame, потому что когда вы расширяете его ваш класс являетсяJFrame, JFrame является жестким, поэтому вы не можете разместить его ни в чем другом, вместо этого вы можете подумать о создании экземпляра JFrame, и если вам когда-либо понадобится расширение JComponent e xtend от JPanel.

  3. JButton bsmbt= new JButton("OK"); переменная bsmbt является локальной переменной внутри конструктора, ваша глобальная переменная bsmbt не используется в любом месте, и если вы пытаетесь использовать его позже вы получите NullPointerException, вместо того, чтобы изменить эту линию:

    bsmbt= new JButton("OK"); 
    
  4. Вы используете null макет для p2, вместо этого использовать правильную Layout manager и читать Null layout is evil и Why is it frowned upon to use a null layout in swing?. Swing был разработан для работы с различными PLAF, размерами экрана и разрешениями, в то время как пиксельные идеальные графические интерфейсы (с setBounds()) могут показаться лучшим и более быстрым способом создания сложного графического интерфейса в Swing, чем больше GUI вы сделаете, тем больше ошибок вы будете из-за этого.

Чтобы решить вашу проблему вызова revalidate() и repaint()

Приведенный выше код создает 2 текстовых поля. но когда я снова добавлю какую-то ценность и отправлю ее, она, похоже, не отражает никаких изменений.

Это может быть потому, что вы перекрывая x, y, height и width переменные каждый раз, когда вы вводите TFArray метод. Но это предположение, если вы хотите получить реальный ответ, следуйте приведенным выше предложениям и опубликуйте правильные и действительные Minimal, Complete, and Verifiable example

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