2016-12-07 12 views
0

런타임에 입력을 받아서 프레임에 텍스트 필드를 만들려고합니다. 가능한가? 아니면 다른 프레임을 만들어야합니다. 이 코드를 시도했지만 작동하지 않습니다. 제발 도와주세요. 그리고이 코드의 잘못된 점을 말해주세요.런타임에 Jframe에 텍스트 필드 추가하기

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

이 코드는 위의 GUIDesign() 메서드에서 panel1에 만든 버튼이 하나 뿐인 텍스트 필드를 보여줍니다. 나는 입력으로 주어진 많은 텍스트 필드를 만들고 싶었다. 하지만이 코드는 작동하지 않습니다. – kikkaz69

+1

1)'public void TFArray' 메소드 이름은 lowerCamelCase이어야합니다. 2)'JFrame' 확장은'JPanel'을 확장하고'JFrame' 인스턴스를 생성해야한다면'JFrame'을 대신 확장하지 말아야합니다. JButton bsmbt = new JButton ("OK");'글로벌 변수'JButton bsmbt; '가 그 라인 때문에 사용되지 않는다는 것을 알고 계십니까? 4) 정확하게 작동하지 않는 부분은 무엇입니까? – Frakcool

답변

3

당신은 당신의 코드에서 많은 오류가 있습니다

  1. public void TFArray(JTextField[] temp) : 메소드 이름은 당신이 그것을 확장 할 때 때문에

    당신은 JFrame을 확장하고
  2. , 당신은, JFrame을 연장해서는 안 lowerCamelCase로 시작해야 수업 JFrame이고 JFrame은 딱딱한 것이므로 다른 곳에 배치 할 수 없으므로 JFrame 인스턴스를 만드는 것이 좋습니다. JComponent e를 확장해야하는 경우 JPanel에서 xtend하십시오.

    :

  3. JButton bsmbt= new JButton("OK"); 변수 bsmbt는 글로벌 변수 bsmbt 어디서나 사용되지 않으며, 당신이 나중에 사용하려고하면 그 라인을 대신 NullPointerException을 얻을 변경할 수 있습니다, 생성자 내부의 지역 변수입니다 당신은 p2에 대한 null 레이아웃을 사용하고

    bsmbt= new JButton("OK"); 
    
  4. 대신 적절한 Layout manager을 사용하고 Null layout is evilWhy is it frowned upon to use a null layout in swing?를 참조하십시오. Swing은 다양한 PLAF, 화면 크기 및 해상도로 작동하도록 설계되었으며 완벽한 픽셀 GUI (setBounds() 포함)는 스윙에서 복잡한 GUI를 만드는 가장 빠르고 빠른 방법처럼 보일 수 있습니다. GUI를 많이 만들수록 더 많은 오류가 발생할 수 있습니다. 이것 때문에.

가 문제 호출 위의 코드는이 텍스트 필드를 생성 revalidate()repaint()

를 해결합니다. 하지만 다시 가치를 부여하고 제출하면 변경 사항을 반영하지 않는 것 같습니다. 당신이 x, y, heightwidth 변수마다 무시하고 있기 때문에 수 있습니다

당신은 TFArray 방법을 입력합니다. 그러나 실제 답변을 원한다면 위의 제안을 따르고 적절하고 유효한 것을 게시하십시오. Minimal, Complete, and Verifiable example