2017-05-18 14 views
-1

간단한 Swing App을 사용하여 여러 JButton으로 특정 유형의 프로젝트를 관리 할 수 ​​있으며 하단에 프로젝트 트리를 인쇄합니다. 프로젝트가 열릴 때 스크린 샷을 참조하십시오. 앱에서 : App screenshoot without project opened초기화 후 JScrollPane + JTree 디스플레이 관련 문제

은 HMI가 간단하고 다음과 같습니다 :

public class Desktop extends JFrame implements ActionListener { 
    public Desktop() { 

    JButton newProject, generate, quit, bAddToClassPath, openProject, saveProject; 
    JPanel mainPanel; 
    JScrollPane jscrollpane; 

    super("MainWindow"); 
    setLookAndFeel(); 
    setSize(330, 440); 
    ParamMainPanel(); 
    setVisible(true); 
    } 

    public static void main(String[] args) { 
    SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
     new Desktop(); 
     } 
    }); 

    } 

    public static void ParamMainPanel() { 
    mainPanel = new JPanel(new FlowLayout()); 

    // BUTTONS PARAM 
    newProject = new JButton("Nouveau projet"); 
    generate = new JButton("Générer..."); 
    quit = new JButton("Quitter"); 
    openProject = new JButton ("Ouvrir projet"); 
    saveProject = new JButton ("Sauvegarder"); 

    bAddToClassPath = UIUtil.iconButton(); 
    bAddToClassPath.setActionCommand("setCP"); 
    bAddToClassPath.addActionListener(this); 
    mainPanel.add(bAddToClassPath); 

    newProject.addActionListener(this); 
    newProject.setActionCommand("newP"); 
    generate.addActionListener(this); 
    generate.setActionCommand("gen"); 
    quit.addActionListener(this); 
    quit.setActionCommand("qui"); 
    openProject.addActionListener(this); 
    openProject.setActionCommand("openP"); 
    saveProject.addActionListener(this); 
    saveProject.setActionCommand("save"); 

    mainPanel.add(newProject); 
    mainPanel.add(generate); 
    mainPanel.add(openProject); 
    mainPanel.add(saveProject); 
    mainPanel.add(quit); 

    // PROJECT TREE 
    jscrollpane = new JScrollPane(new JTree()); 
    jscrollpane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); 
    jscrollpane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED); 
    jscrollpane.setMinimumSize(new Dimension(50, 50)); 
    jscrollpane.setLocation(4,61); 
    jscrollpane.setSize(306,322); 
    mainPanel.add(jscrollpane); 
    } 

} 
는 것은이 프로젝트가 열려 있지 않은 경우입니다 App screenshoot with project opened

나는 이런 식으로 뭔가를 얻을 수

그래서 내가 프로젝트를 열지 않고 (흰색 블록) 프로젝트 트리가없는 상태에서 프로젝트를 열지 않고 Jscrollpane으로 JTree를 표시하는 대신 앱을 시작할 때 App 실행을 원합니다. 나는 그것을하는 방법을 생각할 수 없다, 어떤 생각? 여기

+1

1)'jscrollpane.setHorizontalScrollBarPolicy (30);'작업에 정의 된 상수가있을 때 '마법 번호'를 사용하지 마십시오. 상수는 컴파일 타임 검사의 이점을 얻으며 종종 사람이 읽을 수 있습니다. 2) 더 나은 도움을 받으려면 [MCVE] 또는 [Short, Self Contained, Correct Example] (http://www.sscce.org/)를 게시하십시오. –

+0

어드바이스 주셔서 감사합니다. '마법의 숫자'에 대한 편집을했는데, 그것은 꽤 큰 거대한 '프로젝트 특정 유형'을 설명 할 필요가 없다고 생각한 디스플레이 문제 였기 때문입니다. –

+0

MCVE/SSCCE는 어디에 있습니까? –

답변

-1

나는이 디스플레이 문제를 해결하는 것으로 답 : 내 주요 패널은 어떻게 든 크기 조정에서 저를 방지하고 사용

FlowLayout

내 직접 setSize() 그래서 내 메인 프레임 secondMainPanel에 보조 패널을하기로 결정하여 jscrollpane 특정 레이아웃을 사용하지 않고 new JPanel(null);

jscrollpane을 추가했는데 문제없이 올바른 크기로 표시 할 수있었습니다.

나는 그것을 고치는 더 좋은 방법이있을 것이라고 생각하지만,이 하나의 작품.

+0

* "새 JPanel (null);을 사용하여 특정 레이아웃을 사용하지 않고 'MainFrame'' secondMainPanel'에 보조 패널을 설치하기로 결정했습니다. * 더 많은 문제를 일으키는 해킹만큼 해결책이 아닙니다. . Java GUI는 다른 로케일에서 다른 PLAF를 사용하여 다른 OS, 화면 크기, 화면 해상도 등에서 작동해야합니다. 따라서, 픽셀 완벽한 레이아웃에 도움이되지 않습니다. 대신 레이아웃 관리자 또는 [조합] (http://stackoverflow.com/a/5630271/418556)과 [공백] 레이아웃 채우기 및 테두리 (http://stackoverflow.com/a/17874718/)를 사용하십시오. 418556). –