2010-01-27 5 views
3

3 개의 JPanel을 구현하는 다음 클래스가 있습니다. 나는이를 컴파일 할 때BorderLayout을 사용하여 JPanel에서 오브젝트를 배치하는 방법은 무엇입니까?

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

class netTable implements ActionListener, TableModelListener 
{ 
JFrame frame; 
JTable table; 
Vector rows,columns; 
DefaultTableModel tabModel; 
JScrollPane scrollPane; 
JLabel lblMessage; 
JButton cmdLookup, cmdUpdatePlan; 
JPanel topPanel,mainPanel,buttonPanel; 

public static void main(String[] args) 
    { 
    netTable t=new netTable(); 
    } 

netTable() 
    { 
    rows=new Vector(); 
    columns= new Vector(); 
    String[] columnNames = 
    { 
     "ID", 
     "Client", 
     "Plan", 
     "Amount" 
    }; 

addColumns(columnNames); 

tabModel=new DefaultTableModel(); 
tabModel.setDataVector(rows,columns); 

table = new JTable(tabModel); 
scrollPane= new JScrollPane(table);//ScrollPane 

table.setRowSelectionAllowed(false); 

table.getModel().addTableModelListener(this); 

topPanel = new JPanel(); 
lblMessage=new JLabel("Invoices to Update"); 
topPanel.add(lblMessage); 

buttonPanel=new JPanel(); 

cmdLookup=new JButton("Lookup"); 
cmdUpdatePlan = new JButton("Update Plan"); 

buttonPanel.add(cmdLookup); 
buttonPanel.add(cmdUpdatePlan); 

cmdLookup.addActionListener(this); 
cmdUpdatePlan.addActionListener(this); 

mainPanel=new JPanel(); 
frame=new JFrame("Update Table"); 
frame.setSize(500,500); 
frame.setExtendedState(JFrame.ICONIFIED); 
mainPanel.setLayout(new BorderLayout()); 
mainPanel.add(topPanel,BorderLayout.NORTH); 
mainPanel.add(buttonPanel,BorderLayout.CENTER); 
mainPanel.add(scrollPane,BorderLayout.SOUTH); 

topPanel.setBackground(Color.gray); 
mainPanel.setBackground(Color.white); 
buttonPanel.setBackground(Color.white); 
table.getParent().setBackground(Color.black); 
frame.getContentPane().add(mainPanel); 
frame.addWindowListener(new WindowCloser()); 
frame.setVisible(true); 
} 

} 

, 그것은 그 아래 상단에있는 buttonPanel, 공간, 다음 스크롤을 표시 한 패널 옆에있는 버튼이며, 세 번째는 내 코드에 설명 된대로 테이블, 레이블이 topPanel이 맨 위에 표시되어야하는 레이블을 두지 마십시오. 어떤 아이디어? BorderLayout 위치가 잘못되었다고 생각하고 있습니다.

+0

'mainPanel.add (ScrollPane, BorderLayout.SOUTH);가 아니며'mainPanel.add (scrollPane, BorderLayout.SOUTH); '가되어야합니까? –

+0

음, 편집장이 대문자로 표기했습니다. 고침을 드리겠습니다. – phill

답변

1

이러한 패널을위한 공간이 없기 때문에 상단 패널이 약 3 픽셀로 스 퀴싱됩니다. 시도해보십시오

frame.setSize(800,800); 

대신에.

+0

오케이 .. 어떻게하면 중간 크기의 패널 ​​크기를 줄일 수 있습니까? – phill

+0

그것을 알아 냈습니다. 방금 borderlayout을 사용하지 않고 GridBagLayout으로 전환했습니다. 비록 그것의 더 복잡한, 훨씬 더 유연합니다. 이 답변이 가장 도움이 되었기 때문에이 대답에 점수를 부여했습니다. – phill

1

문제는이 선 것 같다 : 구성 요소가 프레임에 추가하기 전에이 실행되는 경우, 어떤 이유

frame.setExtendedState(JFrame.ICONIFIED); 

, topPanel가 사라집니다.

당신은이 중 하나를 수행 할 수

  1. 척에게 전체 생성자를 try 블록에, 확장 된 상태가 마지막에 설정되는과.

  2. (권장) 모든 방법 (다른 방법을 사용하거나 주 메뉴에서 직접 사용)을 수행 한 후에 확장 상태를 설정하십시오. frame.setVisible(true); 같은 것도 같은 방법으로 이동해야합니다.

0

센터 패널 eat as much of the available space as possible입니다. 최상위 레이블과 스크롤 창 사이의 버튼으로 스크롤 창을 "최대화"하려면 경계 레이아웃이있는 다른 JPanel을 만들고 북쪽에 버튼을 추가하고 가운데에 스크롤 패널을 배치하고 전체 패널을 가운데에 추가하십시오. 귀하의 mainPanel

관련 문제