2017-11-20 46 views
0

내 탐색 모음 패널에 단추가 배치되고 jDesktopPane이 내용 패널에 배치되는 BorderLayout이있는 jFrame 양식입니다. CardLayout이있는 DesktopPane은 다른 크기의 jPanel Form을 표시합니다. jPanel Form의 다른 크기에 따라 Content Panel (전체 양식 포함) 크기를 조정하고 싶습니다. 이것을 할 수 있습니까? 그렇지 않다면 패널 크기를 조정하고 전체 양식을 코드로 조정하려고했지만 작동하지 않습니다.Java에서 BorderLayout을 사용하여 자동으로 크기 조정

System Design

나는이 몇 가지 코드로 연주하려고했지만, 제대로 동작하지 않습니다.

Main_Menu form = new Main_Menu(); 
form.pack(); 
form.setSize(900, 548); 
form.setPreferredSize(new Dimension(900, 548)); 
form.validate(); 
+0

레이아웃 매니저를 제공하는 것을 고려하여 문제를 해결하지 못할 경우 레이아웃 관리자는 동적 크기를 제공하기 위해 할 수는

힌트; 'setPreferred/Minimum/MaximumSize'를 사용하지 말고 레이아웃 관리자가 작업을 수행하게하십시오 – MadProgrammer

+0

문제 설명이 많은 의미가 없습니다. [최소, 완료 및 검증 가능한 예제]를 제공하는 것을 고려하십시오 (https : // stackoverflow .com/help/mcve) – MadProgrammer

+0

참조 : https://stackoverflow.com/help/someone-answers – c0der

답변

-1

시도하지 form.pack();pack();를 사용합니다. 또는 setLayout 또는 사용할 수있는 제한된 정보에 근거 그래서 CardLayout

+1

* "form.pack();이 아닌 pack()을 사용해보십시오."* 클래스가 창 기반 클래스? 사용 가능한 코드에 기반한'form.pack()'이 정확한 접근 방법 인 것처럼 보일 것이다. – MadProgrammer

1

, 사용, 나는

import java.awt.BorderLayout; 
import java.awt.CardLayout; 
import java.awt.Color; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JComponent; 
import javax.swing.JDesktopPane; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 
import javax.swing.border.EmptyBorder; 

public class Test { 

    public static void main(String[] args) { 
     new Test(); 
    } 

    public Test() { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       JFrame frame = new JFrame(); 

       CardLayout layout = new CardLayout(); 
       JDesktopPane pane = new JDesktopPane(); 
       Navigator navigator = new Navigator(pane, layout); 
       pane.setLayout(layout); 
       pane.setBackground(Color.GREEN); 

       frame.add(new TopPane(), BorderLayout.NORTH); 
       frame.add(new NavigationPane(navigator), BorderLayout.WEST); 


       for (int index = 0; index < 5; index++) { 
        pane.add(new ContentPane(index), Integer.toString(index)); 
       } 

       JLabel initial = new JLabel("All your content belong to us"); 
       initial.setBorder(new EmptyBorder(20, 20, 20, 20)); 
       pane.add(initial, "initial"); 

       layout.show(pane, "initial"); 

       frame.add(pane); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class Navigator { 
     private JComponent parent; 
     private CardLayout layout; 

     public Navigator(JComponent parent, CardLayout layout) { 
      this.parent = parent; 
      this.layout = layout; 
     } 

     public void show(String name) { 
      layout.show(parent, name); 
     } 
    } 

    public class TopPane extends JPanel { 

     public TopPane() { 
      setLayout(new GridBagLayout()); 
      setBorder(new EmptyBorder(20, 20, 20, 20)); 
      setBackground(Color.BLUE); 
      JLabel title = new JLabel("Top Panel"); 
      title.setForeground(Color.WHITE); 
      add(title); 
     } 

    } 

    public class NavigationPane extends JPanel { 

     private Navigator navigator; 

     public NavigationPane(Navigator navigator) { 
      setLayout(new GridBagLayout()); 
      setBorder(new EmptyBorder(20, 20, 20, 20)); 
      setBackground(Color.ORANGE); 

      GridBagConstraints gbc = new GridBagConstraints(); 
      gbc.gridwidth = GridBagConstraints.REMAINDER; 
      gbc.fill = GridBagConstraints.BOTH; 
      for (int index = 0; index < 5; index++) { 
       JButton btn = new JButton("Test " + index); 
       btn.setActionCommand(Integer.toString(index)); 
       add(btn, gbc); 

       btn.addActionListener(new ActionListener() { 
        @Override 
        public void actionPerformed(ActionEvent e) { 
         String name = e.getActionCommand(); 
         navigator.show(name); 
        } 
       }); 
      } 
     } 
    } 

    public class ContentPane extends JPanel { 
     public ContentPane(int value) { 
      setLayout(new GridBagLayout()); 
      setBorder(new EmptyBorder(20, 20, 20, 20)); 
      setBackground(Color.MAGENTA); 
      add(new JLabel("Hello from " + Integer.toString(value))); 
     } 
    } 
} 

당신이 작업 구성 요소와를 무시하고, setPreferred/Minimum/MaximumSize을 피하고 잘 작동하는 것 같다 빠른 테스트를 썼다 이 후 자동으로 수행하는 Minimal, Complete, and Verifiable example