2014-07-23 3 views
-1

null 레이아웃에 문제가 있습니다. programm에 이런 구조를 가지고있다 - 탭 구획 (JTabbedPane에)
            -null 레이아웃을 사용한 요소 배치

창 (JFrame의)
        .. 일부 탭 ..
            - JScrollPane (클래스 테이블)에 랩핑 된 재정의 된 JPanel

또한 JLabel (Kanban 클래스)을 재정의했습니다.

나는 칸반의 일부 인스턴스를 테이블에 추가하려고 시도했지만 아무 것도 가지고 있지 않습니다. Table의 레이아웃을 null에서 BorderLayout으로 변경하면 (예를 들어) 요소가 나타나 잘 작동합니다.

오라클 설명서에서는 1) null 레이아웃을 설정하고, 2) 자식 요소에 setBounds()를 호출하고, 3) null 레이아웃이있는 요소에서 repaint()를 호출합니다. 그것은 나를 위해 일하지 않습니다. (정말로).

테이블 배치 코드 (윈도우의 생성자) :

Table table = new Table(); 
JScrollPane panel = new JScrollPane(table); 

tabbedPanel.addTab("New tab", panel); 
tabbedPanel.setSelectedIndex(tabbedPanel.getTabCount() - 1); 

table.setPreferredSize(new Dimension(600, 400)); 
table.setSize(600, 400); 

표 생성자 :

setDoubleBuffered(true); 
setLayout(null); 
setBounds(0,0,600,400); 

Kanban kanban = new Kanban("Label text"); 
kanban.setBounds(10, 10, kanban.getWidth(), kanban.getHeight()); 

add(kanban); 

이 문제점은 무엇입니까? 요소가 널 레이아웃으로 그리지 않는 이유는 무엇입니까?

--- 추가 라벨의 포인트 위치가 필요하기 때문에 널 레이아웃이 필요합니다.

+5

의 공식 문서에서 참조하십시오 레이아웃. * 의심의 여지가 없습니다. – Braj

+1

if (* null 레이아웃. *에 문제가 있음) null 레이아웃을 사용하지 마십시오. –

답변

2

그들은 0입니다. 그러나 위의 모든 의견에 동의합니다. null 레이아웃을 사용하지 마십시오. GridLayout으로 패널을 정의하고 거기에 모든 라벨을 배치하십시오.

+0

Kanben 생성자에서 정의 된 고정 크기가 있습니다. – Ivan

0

NUllLayout은 자유와 함께 제공되는 가장 효율적인 레이아웃 관리자이므로 요소를 배치 할 위치를 명시 적으로 지정할 수 있습니다. 그러나 실제로 효율적으로 작업하려면 프레임의 위치를 ​​픽셀 단위로 그림으로 그려야합니다. 다음 코드를 고려하여 코딩 할 때 기하학을 적용하십시오.

package com.samuTech.DialogBoxes; 

import javax.swing.JFrame; 
import javax.swing.JTextField; 
import javax.swing.JPasswordField; 
import javax.swing.JButton; 
import java.awt.Color; 
import java.awt.Font; 
import java.awt.Graphics; 
import javax.swing.JLabel; 

public class NullLayout2 extends JFrame { 

private static JLabel nameLabel; 
private static JLabel passwordLabel; 
private static JTextField userName; 
private static JPasswordField pass; 
private static JButton ok; 

public NullLayout2(){ 

    super("Null Layout"); 

    setSize(getMaximumSize().width,getMaximumSize().height); 
    setLocation(getLocation().x,getLocation().y); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setVisible(true); 
    getContentPane().setBackground(Color.BLUE); 
    setLayout(null); 

    nameLabel = new JLabel("User Name"); 
    passwordLabel = new JLabel("Password"); 
    userName = new JTextField(20); 
    pass = new JPasswordField(20); 
    ok = new JButton("Ok"); 

    userName.setBounds(200,100,200,30); 
    pass.setBounds(200,150,200,30); 
    ok.setBounds(300,200,100,30); 
    nameLabel.setBounds(5,100,150,30); 
    passwordLabel.setBounds(5,150,150,30); 

    add(userName); 
    add(passwordLabel); 
    add(nameLabel); 
    add(pass); 
    add(ok); 

} 

public void pain(Graphics g){ 

    g.drawString("Graphitii trials ", 55, 400); 
} 
public static void main(String[]args){ 
    javax.swing.SwingUtilities.invokeLater(

      new Runnable(){ 

       @Override 
       public void run(){ 
        new NullLayout2(); 
       } 
      } 

    ); 
} 

}

대신 당신이 당신의 소프트웨어 개발 라이프 특별한 GUI 디자인에 필요한 분명히하는 도구를주는 내가 널에 문제가 * 널 레이아웃 here