프레임에 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의 차이점을 알고 싶습니다. 고맙습니다.
이유를 추가 할 필드, 문제 당신은 또한
repaint
단지 확인하기를 포함 할 수업데이트
를 해결하는 동안에서
경우, 단순히
knear.getFrame().setContentPane(knear.getPanel());
후knear.getFrame().invalidate();
를 호출 수동으로? 레이아웃을 표시하기 위해 할 일이 있습니까? –난 그냥 자바 GUI를 수동으로 만드는 법을 배우고 싶다. 그러나 ide에 대한 모든 제안은 자바에서 GUI를 만들 수 있습니까? 참고로 Mac OS X 사자를 사용하고 있습니다. 감사합니다 –
java는 플랫폼 독립적입니다. 즉, os 호환 jre를 설치하고 바이트 코드로 점을 가상적으로 그립니다. –