2014-11-23 4 views
0
Im having trouble on calling my Loop that i created to be placed on the JTextField. Im only a beginner on GUI so i don't understand what i am missing or lacking . Please Help me. 
the program must print a box of period if the user enters 1 and box of asterisk if the user 
enters 2. and if the user enters 2 or more an error message will show up. 

코드를 다시 편집했습니다. 이것은 내가 무엇을 생각해 냈는지, 문제는 내가 Jtextarea가 인쇄물을 쌓아 두는 숫자를 다시 입력 한 후, 그것이 새로 고쳐지지 않는다는 것입니다. 왜 그런지 모르겠군요. 예를 들어 1을 입력하면 마침표 상자에 쇼핑하게됩니다. 내가 별표의 상자가 기간의 상자 아래에 표시 .and 그냥 지금Jtextfield에서 루프를 호출하는 방법

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
public class Box extends JFrame{ 

    private JLabel numL,resultL; 
    private JTextField numTF; 
    private JTextArea resultTF; 
    private JButton printB,exitB; 
    private PrintButtonHandler pbHandler; 
    private ExitButtonHandler exitHandler; 




    public Box(){ 

     numL=new JLabel("Enter 1 or 2", SwingConstants.CENTER); 
     resultL=new JLabel("Result",SwingConstants.CENTER); 
     numTF=new JTextField(20); 
     //resultTF=new JTextField(20); 
     resultTF = new JTextArea(5,5); 

     printB=new JButton("Print"); 
     pbHandler=new PrintButtonHandler(); 
     printB.addActionListener(pbHandler); 


     exitB=new JButton("Exit"); 
     exitHandler= new ExitButtonHandler(); 
     exitB.addActionListener(exitHandler); 


     setTitle("BOX"); 

     Container p=getContentPane(); 
     p.setLayout(new GridLayout(5,1)); 

     p.add(numL); 
     p.add(numTF); 
     p.add(resultL); 
     p.add(resultTF); 
     p.add(printB); 
     p.add(exitB); 

     setSize(600,600); 
     setVisible(true); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } 


     private class PrintButtonHandler implements ActionListener{ 
      public void actionPerformed(ActionEvent e){ 
       //Box1 p=new Box1(); 
       int num,height=5,width=5,numLL; 
        numLL=Integer.parseInt(numTF.getText()); 

       Font f = resultTF.getFont(); 
       resultTF.setFont(new Font(Font.MONOSPACED, f.getStyle(), f.getSize())); 





      if(numLL==1){ 
       for(int i = 0; i < 5; i++) { 
       for(int j = 0; j < 5; j++) { 
       resultTF.append("."); 
       } 
       resultTF.append("\n"); 
       } 

      }else if(numLL==2){ 
       for(int i = 0; i < 5; i++) { 
       for(int j = 0; j < 5; j++) { 
       resultTF.append("*"); 
       } 
       resultTF.append("\n"); 
       } 
      }else if(numLL>2){ 
       resultTF.append("NOT 1 OR 2:"); 

      } 
      } 
     } 

     private class ExitButtonHandler implements ActionListener{ 
      public void actionPerformed(ActionEvent e){ 

       System.exit(0); 

      } 
     } 

     public static void main(String[]args){ 
      Box p=new Box(); 
     } 
} 
+0

문제가 정확히 무엇입니까? – Radiodef

+0

PrintButtonHandler 부분입니다. 루프를 실행하는 프로그램을 가져올 수 없습니다. –

+0

그것은 나를 위해 잘 작동합니다. 'System.out.print'가'resultTF' 같은 것으로 출력 될 것으로 기대하고 있습니까? – Radiodef

답변

0

을 쌓아 당신이 System.out에 상자를 지시하는 계속해서 2를 입력합니다. 따라서 텍스트 구성 요소로 전달해야합니다.

또한 다중 행이 아니기 때문에 JTextField을 사용할 수 없습니다. 대신 JScrollPane 안에 JTextArea과 같은 것을 사용해야합니다. 당신이 스크롤 창을 원하지 않는 경우

resultTF = new JTextArea(); 
Font f = resultTF.getFont(); 
resultTF.setFont(new Font(Font.MONOSPACED, f.getStyle(), f.getSize())); 

add(new JScrollPane(resultTF)); 

. 
. 
. 

for(int i = 0; i < height; i++) { 
    for(int j = 0; j < width; j++) { 
     resultTF.append("."); 
    } 
    resultTF.append("\n"); 
} 

, 당신은 또한, 예를 들어, 상자를 만들 StringBuilder를 사용하여 특정 행과 열 (new JTextArea(5, 5))와 텍스트 영역을 만들고 setText 대신 append을 사용할 수 있습니다 .

참고로 스윙 이벤트 스레드에 GUI를 만들어야합니다. 즉, 당신의 maininvokeLater에 전화로 포장해야합니다

public static void main(String[] args) { 
    SwingUtilities.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      Box p = new Box(); 
     } 
    }); 
} 

은 참조 :

+0

Thankyou Goodsir,하지만 새로운 problen .. 코드를 editted 후, JTextarea 결과를 statcking 유지합니다. 새로 고침하지 않습니다 –

+0

상자를 추가하기 전에 텍스트를 지울 수 있습니다. 예 :'resultTF.setText ("");' – Radiodef

+0

신경 쓰지 마세요. 감사합니다. D –

관련 문제