2012-09-04 3 views
2

간단한 GUI로 작업 중이며 텍스트 필드에 어려움을 겪고 있습니다.텍스트 필드가 옆의 패널과 겹치지 않도록 텍스트 필드를 수정하려면 어떻게합니까?

enter image description here 이것이 내가 작업하고있는 것입니다. 오른쪽에있는 것이 보일 것으로 보이는 것이고, 왼쪽에있는 것은 내가 한 것입니다. 주소 1, 주소 2 등의 레이블을 넣었습니다. 그러나 텍스트 필드를 넣기 시작하면 사라졌습니다. setSize, setLocation을 사용해 보았지만 아무것도 작동하지 않습니다.

동일한 결과가 예상 결과에서 보이는 바와 같이 상단 패널 "Paymen Method"에 발생하며 텍스트 필드가 있어야합니다. 내 코드에 포함되어 있지만 실행할 때 표시되지 않습니다. 도와주세요.

여기 내 코드입니다 :

import javax.swing.*; 
    import java.awt.*; 
    public class PanelDemo extends javax.swing.JFrame{ 
    private static final int FRAME_WIDTH = 300; 
    private static final int FRAME_HEIGHT = 350; 
    private static final int FRAME_X_ORIGIN = 150; 
    private static final int FRAME_Y_ORIGIN = 250; 
    public static void main(String[] args){ 
    //Frame 
    JFrame contentPane = new javax.swing.JFrame(); 
    contentPane.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    contentPane.setSize(300,350); 
    contentPane.setResizable(false); 
    contentPane.setLayout(new BorderLayout()); 
    //Payment Panel 
    JPanel paymentPanel = new javax.swing.JPanel(); 
    paymentPanel.setLayout(new BorderLayout()); 
    //paymentPanel.setPreferredSize(new java.awt.Dimension(270, 90)); 
    paymentPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Payment Method", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Arial", 1, 12))); 

    ////Components inside Payment Panel 
    ////A) Panels: Radio and Details 
    JPanel radioPanel = new JPanel(); 
    radioPanel.setLayout(new GridLayout(3,1)); 
    JRadioButton Rbutton1 = new JRadioButton("Credit Card"); 
    JRadioButton Rbutton2 = new JRadioButton("E-Funds"); 
    JRadioButton Rbutton3 = new JRadioButton("Check"); 
    Rbutton3.setSelected(true); 
    ButtonGroup Bgroup = new ButtonGroup(); 
    Bgroup.add(Rbutton1); 
    Bgroup.add(Rbutton2); 
    Bgroup.add(Rbutton3); 
    radioPanel.add(Rbutton1); 
    radioPanel.add(Rbutton2); 
    radioPanel.add(Rbutton3); 

    //I thought of using a panel as a gap, but still didn't work 
    /*JPanel gap = new JPanel(); 
    gap.setLayout(new BorderLayout()); 
    gap.setPreferredSize(new java.awt.Dimension(10, 90));*/ 


    JPanel detailsPanel = new JPanel(); 
    detailsPanel.setLayout(new GridLayout(2,1)); 
    //detailsPanel 
    JLabel Accountnum = new JLabel("Account number:"); 
    JTextField Account = new JTextField(); 
    Account.setPreferredSize(new java.awt.Dimension(90, 40)); 
    detailsPanel.add(Accountnum); 
    detailsPanel.add(Account); 

    paymentPanel.add(gap, BorderLayout.CENTER); 
    paymentPanel.add(detailsPanel); 
    paymentPanel.add(radioPanel); 
    contentPane.add(paymentPanel, BorderLayout.PAGE_START); 

    ////Address Information Panel 
    JPanel addressPanel = new JPanel(); 
    addressPanel.setLayout(new BorderLayout()); 
    addressPanel.setSize(new java.awt.Dimension(270, 80)); 
    addressPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Adress Information", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Arial", 1, 12))); 
    contentPane.add(addressPanel, BorderLayout.CENTER); 

    ////Components inside the Address Information Panel 
    ////A) Labels (Address 1, Address 2,...) 
    JPanel InfoLabel = new JPanel(); 
    InfoLabel.setLayout(new GridLayout(5,1)); 
    JLabel address1 = new JLabel("Address 1:"); 
    JLabel address2 = new JLabel("Address 2:"); 
    JLabel city = new JLabel("City:"); 
    JLabel state = new JLabel("State:"); 
    JLabel zip = new JLabel("Zip Code:"); 

    InfoLabel.add(address1); 
    InfoLabel.add(address2); 
    InfoLabel.add(city); 
    InfoLabel.add(state); 
    InfoLabel.add(zip); 

    ////B)Text Fields 
    JPanel infotext = new JPanel(); 
    infotext.setLayout(new GridLayout(5,1)); 

    JTextField text1 = new JTextField(); 
    JTextField text2 = new JTextField(); 
    JTextField text3 = new JTextField(); 
    JTextField text4 = new JTextField(); 
    JTextField text5 = new JTextField(); 

    addressPanel.add(InfoLabel); 
    addressPanel.add(infotext); 

    JPanel controlPanel = new JPanel(); 
    controlPanel.setLayout(new FlowLayout()); 
    JLabel test = new JLabel("test"); 
    controlPanel.add(test); 
    contentPane.add(controlPanel, BorderLayout.PAGE_END); 


    contentPane.setVisible(true); 
} 

} 

답변

3

나는 당신이 필요 않는 버전으로 얻을 수 있도록 코드를 조금 수정했습니다. 기본적으로, 내가 한 것은 레이아웃 관리자를 사용하는 방식을 정리하는 것이 었습니다. 이러한 사용자 인터페이스를 여러 개 수행해야한다면 Swing 레이아웃 관리자의 javadoc을보다 잘 이해할 수 있습니다. 당신은 레이아웃 영역을 설정 깜빡

import java.awt.BorderLayout; 
import java.awt.FlowLayout; 
import java.awt.GridLayout; 

import javax.swing.ButtonGroup; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JRadioButton; 
import javax.swing.JTextField; 

public class PanelDemo extends javax.swing.JFrame { 
    private static final int FRAME_WIDTH = 300; 
    private static final int FRAME_HEIGHT = 350; 
    private static final int FRAME_X_ORIGIN = 150; 
    private static final int FRAME_Y_ORIGIN = 250; 

    public static void main(String[] args) { 
    // Frame 
    JFrame contentPane = new javax.swing.JFrame(); 
    contentPane.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    contentPane.setSize(300, 350); 
    contentPane.setResizable(false); 
    contentPane.setLayout(new BorderLayout()); 
    // Payment Panel 
    JPanel paymentPanel = new javax.swing.JPanel(); 
    paymentPanel.setLayout(new BorderLayout()); 
    // paymentPanel.setPreferredSize(new java.awt.Dimension(270, 90)); 
    paymentPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Payment Method", 
     javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Arial", 1, 12))); 

    // //Components inside Payment Panel 
    // //A) Panels: Radio and Details 
    JPanel radioPanel = new JPanel(); 
    radioPanel.setLayout(new GridLayout(3, 1)); 
    JRadioButton Rbutton1 = new JRadioButton("Credit Card"); 
    JRadioButton Rbutton2 = new JRadioButton("E-Funds"); 
    JRadioButton Rbutton3 = new JRadioButton("Check"); 
    Rbutton3.setSelected(true); 
    ButtonGroup Bgroup = new ButtonGroup(); 
    Bgroup.add(Rbutton1); 
    Bgroup.add(Rbutton2); 
    Bgroup.add(Rbutton3); 
    radioPanel.add(Rbutton1); 
    radioPanel.add(Rbutton2); 
    radioPanel.add(Rbutton3); 

    // I thought of using a panel as a gap, but still didn't work 
    /* 
    * JPanel gap = new JPanel(); gap.setLayout(new BorderLayout()); 
    * gap.setPreferredSize(new java.awt.Dimension(10, 90)); 
    */ 

    JPanel detailsPanel = new JPanel(); 
    detailsPanel.setLayout(new GridLayout(2, 2)); 
    // detailsPanel 
    JLabel Accountnum = new JLabel("Account number:"); 
    JTextField Account = new JTextField(); 
    Account.setPreferredSize(new java.awt.Dimension(90, 40)); 
    detailsPanel.add(Accountnum); 
    detailsPanel.add(Account); 

    // paymentPanel.add(gap, BorderLayout.CENTER); 
    paymentPanel.add(radioPanel, BorderLayout.CENTER); 
    paymentPanel.add(detailsPanel, BorderLayout.EAST); 
    contentPane.add(paymentPanel, BorderLayout.PAGE_START); 

    // //Address Information Panel 
    JPanel addressPanel = new JPanel(); 
    addressPanel.setLayout(new BorderLayout()); 
    addressPanel.setSize(new java.awt.Dimension(270, 80)); 
    addressPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Adress Information", 
     javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Arial", 1, 12))); 
    contentPane.add(addressPanel, BorderLayout.CENTER); 

    // //Components inside the Address Information Panel 
    // //A) Labels (Address 1, Address 2,...) 
    JPanel InfoLabel = new JPanel(); 
    InfoLabel.setLayout(new GridLayout(5, 2)); 
    JLabel address1 = new JLabel("Address 1:"); 
    JLabel address2 = new JLabel("Address 2:"); 
    JLabel city = new JLabel("City:"); 
    JLabel state = new JLabel("State:"); 
    JLabel zip = new JLabel("Zip Code:"); 
    JTextField text1 = new JTextField(); 
    JTextField text2 = new JTextField(); 
    JTextField text3 = new JTextField(); 
    JTextField text4 = new JTextField(); 
    JTextField text5 = new JTextField(); 

    InfoLabel.add(address1); 
    InfoLabel.add(text1); 
    InfoLabel.add(address2); 
    InfoLabel.add(text2); 
    InfoLabel.add(city); 
    InfoLabel.add(text3); 
    InfoLabel.add(state); 
    InfoLabel.add(text4); 
    InfoLabel.add(zip); 
    InfoLabel.add(text5); 

    // //B)Text Fields 
    JPanel infotext = new JPanel(); 
    infotext.setLayout(new GridLayout(5, 1)); 

    addressPanel.add(InfoLabel, BorderLayout.CENTER); 
// addressPanel.add(infotext); 

    JPanel controlPanel = new JPanel(); 
    controlPanel.setLayout(new FlowLayout()); 
    JLabel test = new JLabel("test"); 
    controlPanel.add(test); 
    contentPane.add(controlPanel, BorderLayout.PAGE_END); 
    contentPane.setVisible(true); 
    } 
} 
+0

대단히 감사합니다! – nutellafella

+0

@ 대단한 일, 그것이 작동하도록하기 위해 당신이 한 일에 대한 약간의 설명은 우리의 영업을 교육하는 길을 간다.) – MadProgrammer

+0

좋은 지적. 나는 약간의 생각, 감사를 더했다. –

2

: 여기

는 작업 버전입니다.

paymentPanel.add(detailsPanel, BorderLayout.EAST); 
paymentPanel.add(radioPanel, BorderLayout.CENTER); 

addressPanel.add(InfoLabel,BorderLayout.WEST); 
addressPanel.add(infotext, BorderLayout.CENTER); 
관련 문제