2013-07-07 3 views
0

JPanel과 같이 표시하려고합니다.JFrame에 JPanel 배치 및 크기 조정

Sample layout

다음 왼쪽 60 % 폭과 50 %의 높이를 각각 오른쪽으로 40 %의 폭과 100 % 높이 어떻게이를 수에 대한 패널의 2 개 패널?

import javax.swing.*; 
    import java.awt.*; 
    public class INV{ 

private JFrame mainFrame; 
private JPanel Outer_panel1; 
private JPanel Outer_panel2; 
private JPanel Panel1; 
private JPanel Panel2; 
private JPanel Panel3; 
private JPanel Panel4; 
private JButton b1; 
private JButton b2; 
private JButton b3; 
private JComboBox List; 
private JComboBox List2; 
private JTextField Item_name; 
private JTextField Dec_qty; 
private JTextField Inc_qty; 
private static String[] Items = {"wood","steel"}; 
private JTable Table; 
private JScrollPane Scroll; 
static double xsize; 
static double ysize; 

    public INV(){ 
     gui(); 
    } 

    public void gui(){ 
     mainFrame = new JFrame("sample"); 
     GridBagConstraints Con = new GridBagConstraints(); 

     //Left Panel 
     Dec_qty=new JTextField(3); 
     Inc_qty=new JTextField(3); 
     List = new JComboBox(Items); 
     List2 = new JComboBox(Items); 
     b1 = new JButton("OK"); 
     b2 = new JButton("OK"); 


     Outer_panel1 = new JPanel(new GridBagLayout()); 
     Outer_panel1.setBackground(Color.yellow); 

     Panel1 = new JPanel(); 
     Panel1.setBackground(Color.blue); 
     Panel2 = new JPanel(); 
     Panel2.setBackground(Color.red); 



     Outer_panel1.add(b1); 
     Outer_panel1.add(b2); 

     Panel1.add(List); 
     Panel2.add(List2); 
     Panel1.add(Inc_qty); 
     Panel2.add(Dec_qty); 
     Panel1.add(b1); 
     Panel2.add(b2); 

     Con.gridx = 0; 
     Con.gridy = 0; 
     Con.ipady = 300; 
     Con.fill = GridBagConstraints.VERTICAL; 
     Outer_panel1.add(Panel1,Con); 
     Con.gridx = 0; 
     Con.gridy = 1; 
     Con.ipady = 0; 
     Con.weighty = 1.0; 
     Outer_panel1.add(Panel2,Con); 


     mainFrame.add(Outer_panel1, BorderLayout.LINE_START); 


     //right panel 
     Outer_panel2 = new JPanel(new GridBagLayout()); 
     Outer_panel2.setBackground(Color.CYAN); 

     Panel3 = new JPanel(); 
     Panel3.setBackground(Color.MAGENTA); 
     Panel4 = new JPanel(); 
     Panel4.setBackground(Color.ORANGE); 

     //Panel3 
     Item_name =new JTextField(20); 
     b3 = new JButton("Search"); 

     //Panel4 and Table 
     String[] columnNames = {"column1","column2"}; 
     Object[][] data = {{"sample1","sample2"}, 
          {"sample3","sample4"}}; 

     Table = new JTable(data, columnNames); 
     Table.setPreferredScrollableViewportSize(new Dimension(200,200)); 
     Table.setFillsViewportHeight(true); 
     Scroll = new JScrollPane(Table); 

     Panel3.add(Item_name); 
     Panel3.add(b3); 
     Panel4.add(Scroll); 

     Con.gridx = 0; 
     Con.gridy = 0; 
     Con.ipady = 0; 
     Con.weighty = 0; 
     Outer_panel2.add(Panel3, Con); 
     Con.gridx = 0; 
     Con.gridy = 1; 
     Con.ipady = 0; 
     Con.fill = GridBagConstraints.BOTH; 
     Con.weighty = 1.0; 

     Outer_panel2.add(Panel4, Con); 
     mainFrame.add(Outer_panel2, BorderLayout.EAST); 

     mainFrame.setVisible(true); 
     mainFrame.setSize(900, 500); 
     mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    } 


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

1) 더 빨리 도움 들어 [SSCCE (http://sscce.org/)를 작성. 2) 추가 너비/높이로 최소 크기 및 (크기 조정이 가능한 경우) 표시되어야하는 GUI의 ASCII 아트를 제공하십시오. –

+0

* "원하는 크기로 패널의 크기를 조정하고 배치 할 수 없습니다."* JPanel의 크기는 일반적으로 포함 된 크기에 따라 가장 적절하게 설정됩니다. 이 패널 중 어느 패널에 내용 (컨트롤, 레이블 등)이 있습니까? –

+0

노란색과 검은 색 패널에는 드롭 다운 목록, 텍스트 필드 및 제출 버튼이 있으며 빨간색 패널에는 텍스트 필드, 그 옆에있는 버튼 및 텍스트 필드 아래에 2 개의 열이있는 테이블이 있습니다 – John

답변

3

수동으로 크기를 제어해서는 안됩니다. 사용자가 크기를 조정하려는 경우 어떻게해야합니까 ?? 당신은 쓸모없는 계산을해야만한다. 자바는 레이아웃 매니저를 사용하여 행복하게 해줄 것이다.

http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html

+0

조언 해 주셔서 감사합니다. 이를 염두에두고 방금 – John

+0

@ John에게 준 링크에서 배울 것입니다. 그리고 원하는 레이아웃을 얻기 위해 다른 레이아웃 내부에 레이아웃을 넣을 수 있다는 것을 잊지 마십시오. 예 : 다른 JPanel (CardLayout) 내부의 Panel (BorderLayout) 등 –

+0

ohh ok .. 그러나 레이아웃의 크기를 어떻게 설정할 수 있습니까? 예를 들어 동쪽의 패널은 창 60 %를 차지하고 서쪽 패널은 창 40 %를 차지합니다 ... 왜냐하면 이렇게했을 때 패널 내부의 패널 크기는 패널 내부의 내용에 따라 달라집니다 패널 – John

-1
JFrame frame = new JFrame(); 
frame.setLayout(null); 
frame.setSize(600, 400); 

JPanel panel1 = new JPanel(); 
panel1.setBounds(0, 0, 400, 200); 
panel1.setBackground(Color.YELLOW); 
panel1.setLayout(null); 

JPanel panel2 = new JPanel(); 
panel2.setBounds(400, 0, 200, 400); 
panel2.setBackground(Color.RED); 
panel2.setLayout(null); 

JPanel panel3 = new JPanel(); 
panel3.setBounds(0, 0, 600, 400); 
panel3.setBackground(Color.BLACK); 
panel3.setLayout(null); 

panel3.add(panel1); 
panel3.add(panel2); 
frame.add(panel3); 

//YOU CAN USE LAYOUT = NULL TO MANUALLY POSITION YOUR PANELS 
//IT IS BEST TO USE LAYOUT MANAGERS, BUT SETTING THE POSITIONS MANUALLY IS THE EASIEST 
//SPECIALLY IF YOU WILL JUST .setResizable(false) 
+0

도움을 주셔서 감사하지만 패널의 크기가 고정되면 크기가 조정됩니다 ...하지만 사용자가 프레임의 크기를 조정할 때 패널의 크기를 조정하는 방법을 찾으려고합니다. – John

+7

'setLayout (null);'-1 . GUI에 대한 추가 정보를 제공하기 전에 그 이유를 알아보십시오. 우리는 그 충고를 사용하여 만들어진 실수를 바로 잡는 데 너무 많은 시간을 소비합니다. –