2013-04-27 1 views
0

프레임에 JTextField를 추가 할 수 없습니다가이 코드했습니다 자바

import javax.swing.*; 
import java.awt.*; 
import java.util.*; 
import java.awt.event.*; 

class Pattern extends JComponent 
{ 
    private JFrame frame; 
    private JPanel panelBody; 
    private JPanel panelMenu; 
    private JPanel panelAll; 
    private GridLayout glBody; 
    private GridLayout glMenu; 
    private BorderLayout bl; 
    private ArrayList<JLabel> label; 
    private ArrayList<JTextField> tf; 
    private ArrayList<JButton> button; 
    private ArrayList<JButton> buttonMenu; 

    public Pattern() 
    { 
     label = new ArrayList<JLabel>(); 
     tf = new ArrayList<JTextField>(); 
     button = new ArrayList<JButton>(); 
     buttonMenu = new ArrayList<JButton>(); 
    } 

    public void createFrame(String title) 
    { 
     this.frame = new JFrame(title); 
     frame.setSize(1500,1500); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
     frame.setResizable(true); 
    } 

    public JFrame getFrame() 
    { 
     return this.frame; 
    } 

    public void setBorderLayout() 
    { 
     this.bl = new BorderLayout(); 
    } 

    public BorderLayout getBorderLayout() 
    { 
     return this.bl; 
    } 

    public void setGridLayoutBody(int a, int b) 
    { 
     glBody = new GridLayout(a,b); 
    } 

    public void setGridLayoutMenu(int a, int b) 
    { 
     glMenu = new GridLayout(a,b); 
    } 

    public GridLayout getGridLayoutBody() 
    { 
     return this.glBody; 
    } 

    public GridLayout getGridLayoutMenu() 
    { 
     return this.glMenu; 
    } 

    public void createPanel() 
    { 
     this.panelAll = new JPanel(); 
     this.panelAll.setLayout(this.getBorderLayout()); 
     //this.panelAll.add(this.panelBody); 
    } 

    public void createPanelBody() 
    { 
     this.panelBody = new JPanel(); 
     //this.panelMenu.setLayout(this.getBorderLayout()); 
     this.panelBody.setLayout(this.getGridLayoutBody()); 
    } 

    public void createPanelMenu() 
    { 
     this.panelMenu = new JPanel(); 
     //this.panelMenu.setLayout(this.getBorderLayout()); 
     this.panelMenu.setLayout(this.getGridLayoutMenu()); 
    } 

    public JPanel getPanelBody() 
    { 
     return this.panelBody; 
    } 

    public JPanel getPanelMenu() 
    { 
     return this.panelMenu; 
    } 

    public JPanel getPanel() 
    { 
     return this.panelAll; 
    } 

    public void addLabel(JLabel l) 
    { 
     this.label.add(l); 
     this.panelBody.add(l); 
    } 

    public ArrayList<JLabel> getLabel() 
    { 
     return this.label; 
    } 

    public void addTextField() 
    { 
     this.panelBody.add(new JTextField()); 
    } 

    public ArrayList<JTextField> getTF() 
    { 
     return this.tf; 
    } 

    public void addButton(JButton b) 
    { 
     this.button.add(b); 
     this.panelBody.add(b); 
    } 

    public void addButtonMenu(JButton b) 
    { 
     this.buttonMenu.add(b); 
     this.panelMenu.add(b); 
    } 

    public ArrayList<JButton> getButton() 
    { 
     return this.button; 
    } 

    public void createMenu() 
    { 
     this.createPanelMenu(); 
     this.setGridLayoutMenu(16,1); 
     this.panelMenu.setLayout(this.getGridLayoutMenu()); 
     this.addButtonMenu(new JButton("K-Nearest Table Classifier")); 
     this.addButtonMenu(new JButton("Heaviside")); 
     this.addButtonMenu(new JButton("Forward Pass")); 
     this.addButtonMenu(new JButton("Backward Pass")); 
     this.addButtonMenu(new JButton("Naive")); 
    } 

    public void addToPanel() 
    { 
     this.panelAll.add("West", this.panelMenu); 
     this.panelAll.add("North", this.panelBody); 
    } 

} 

class MainPattern 
{ 
    public static void main(String[] args) 
    { 
     Pattern knear = new Pattern(); 

     knear.createFrame("K-Nearest Clasifier"); 

     knear.setBorderLayout(); 

     knear.setGridLayoutBody(2,2); 

     knear.createPanel(); 

     knear.createPanelBody(); 

     knear.createMenu(); 

     knear.addLabel(new JLabel("K = ")); 

     knear.addTextField(); 

     knear.addButton(new JButton("Calculate!")); 

     knear.addButton(new JButton("Reset!")); 

     knear.addToPanel(); 

     knear.getFrame().setContentPane(knear.getPanel()); 
    } 
} 

내가 왜 몰라, 난 프레임에 텍스트 필드를 추가하려고 할 때마다, 출력은 빈 프레임이 될 것입니다 . 그러나 프레임에 텍스트 필드를 추가하지 않으면 (레이블 또는 버튼 만 추가하면됩니다) 완벽하게 작동합니다. 내 코드에 어떤 문제가 있습니까? 그런 다음 Java에서 JTextField와 TextField의 차이점을 알고 싶습니다. 고맙습니다.

+0

이유를 추가 할 필드, 문제 당신은 또한 repaint 단지 확인하기를 포함 할 수

업데이트

를 해결하는 동안에서

경우, 단순히 knear.getFrame().setContentPane(knear.getPanel());knear.getFrame().invalidate();를 호출 수동으로? 레이아웃을 표시하기 위해 할 일이 있습니까? –

+0

난 그냥 자바 GUI를 수동으로 만드는 법을 배우고 싶다. 그러나 ide에 대한 모든 제안은 자바에서 GUI를 만들 수 있습니까? 참고로 Mac OS X 사자를 사용하고 있습니다. 감사합니다 –

+0

java는 플랫폼 독립적입니다. 즉, os 호환 jre를 설치하고 바이트 코드로 점을 가상적으로 그립니다. –

답변

2

문제는 프레임을 아무 것도 추가하기 전에 표시되도록 설정했기 때문입니다.

가능한 경우 프레임을 표시하기 전에 UI를 설정해야합니다.)

import javax.swing.*; 
import java.awt.*; 
import java.util.*; 
import java.awt.event.*; 

class Pattern extends JComponent 
{ 
    private JFrame frame; 
    private JPanel panelBody; 
    private JPanel panelMenu; 
    private JPanel panelAll; 
    private GridLayout glBody; 
    private GridLayout glMenu; 
    private BorderLayout bl; 
    private ArrayList<JLabel> label; 
    private ArrayList<JTextField> tf; 
    private ArrayList<JButton> button; 
    private ArrayList<JButton> buttonMenu; 

    public Pattern() 
    { 
     label = new ArrayList<JLabel>(); 
     tf = new ArrayList<JTextField>(); 
     button = new ArrayList<JButton>(); 
     buttonMenu = new ArrayList<JButton>(); 
    } 

    public void createFrame(String title) 
    { 
     this.frame = new JFrame(title); 
     frame.setSize(1500,1500); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
     frame.setResizable(true); 
    } 

    public JFrame getFrame() 
    { 
     return this.frame; 
    } 

    public void setBorderLayout() 
    { 
     this.bl = new BorderLayout(); 
    } 

    public BorderLayout getBorderLayout() 
    { 
     return this.bl; 
    } 

    public void setGridLayoutBody(int a, int b) 
    { 
     glBody = new GridLayout(a,b); 
    } 

    public void setGridLayoutMenu(int a, int b) 
    { 
     glMenu = new GridLayout(a,b); 
    } 

    public GridLayout getGridLayoutBody() 
    { 
     return this.glBody; 
    } 

    public GridLayout getGridLayoutMenu() 
    { 
     return this.glMenu; 
    } 

    public void createPanel() 
    { 
     this.panelAll = new JPanel(); 
     this.panelAll.setLayout(this.getBorderLayout()); 
     //this.panelAll.add(this.panelBody); 
    } 

    public void createPanelBody() 
    { 
     this.panelBody = new JPanel(); 
     //this.panelMenu.setLayout(this.getBorderLayout()); 
     this.panelBody.setLayout(this.getGridLayoutBody()); 
    } 

    public void createPanelMenu() 
    { 
     this.panelMenu = new JPanel(); 
     //this.panelMenu.setLayout(this.getBorderLayout()); 
     this.panelMenu.setLayout(this.getGridLayoutMenu()); 
    } 

    public JPanel getPanelBody() 
    { 
     return this.panelBody; 
    } 

    public JPanel getPanelMenu() 
    { 
     return this.panelMenu; 
    } 

    public JPanel getPanel() 
    { 
     return this.panelAll; 
    } 

    public void addLabel(JLabel l) 
    { 
     this.label.add(l); 
     this.panelBody.add(l); 
    } 

    public ArrayList<JLabel> getLabel() 
    { 
     return this.label; 
    } 

    public void addTextField() 
    { 
     this.panelBody.add(new JTextField()); 
    } 

    public ArrayList<JTextField> getTF() 
    { 
     return this.tf; 
    } 

    public void addButton(JButton b) 
    { 
     this.button.add(b); 
     this.panelBody.add(b); 
    } 

    public void addButtonMenu(JButton b) 
    { 
     this.buttonMenu.add(b); 
     this.panelMenu.add(b); 
    } 

    public ArrayList<JButton> getButton() 
    { 
     return this.button; 
    } 

    public void createMenu() 
    { 
     this.createPanelMenu(); 
     this.setGridLayoutMenu(16,1); 
     this.panelMenu.setLayout(this.getGridLayoutMenu()); 
     this.addButtonMenu(new JButton("K-Nearest Table Classifier")); 
     this.addButtonMenu(new JButton("Heaviside")); 
     this.addButtonMenu(new JButton("Forward Pass")); 
     this.addButtonMenu(new JButton("Backward Pass")); 
     this.addButtonMenu(new JButton("Naive")); 
    } 

    public void addToPanel() 
    { 
     this.panelAll.add("West", this.panelMenu); 
     this.panelAll.add("North", this.panelBody); 
    } 

} 

class MainPattern 
{ 
    public static void main(String[] args) 
    { 
     Pattern knear = new Pattern(); 

     knear.createFrame("K-Nearest Clasifier"); 

     knear.setBorderLayout(); 

     knear.setGridLayoutBody(2,2); 

     knear.createPanel(); 

     knear.createPanelBody(); 

     knear.createMenu(); 

     knear.addLabel(new JLabel("K = ")); 

     knear.addTextField(); 

     knear.addButton(new JButton("Calculate!")); 

     knear.addButton(new JButton("Reset!")); 

     knear.addToPanel(); 

     knear.getFrame().setContentPane(knear.getPanel()); 
     knear.getFrame().invalidate(); 
     knear.getFrame().repaint(); 
    } 
} 
+0

그것은 작동하지 않습니다 .. –

+0

작품 나를 찾으십시오. – MadProgrammer

관련 문제