2017-11-30 4 views
0

현재 연구를 위해 프로젝트를 진행 중이며 GUI와 관련하여 약간의 문제가 있습니다.BoxLayout이있는 컨테이너의 크기가 구성 요소에 따라 조정되었습니다.

private JButton zoomUp, zoomDown; 
private JComboBox fractalList; 
private JLabel choice,space; 
private JPanel ui,display; 
private JFrame window; 
    public FractalView(FractalModel m, FractalController c, String title, int size_X, int size_Y) 
    { 
    window =new JFrame(); 
    window.setTitle(title); 
    window.setSize(size_X,size_Y); 
    window.setLocationRelativeTo(null); 
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    window.setResizable(false); 
    window.setLayout(new GridBagLayout()); 


    GridBagConstraints gbc = new GridBagConstraints(); 
    gbc.anchor=GridBagConstraints.FIRST_LINE_START; 

    ui=new JPanel();   
    ui.setBackground(Color.GRAY); 
    ui.setBorder(BorderFactory.createTitledBorder("Interface de Controle et Options")); 
    BoxLayout uiLayout = new BoxLayout(ui, BoxLayout.PAGE_AXIS); 
    ui.setLayout(uiLayout); 
    ui.setMaximumSize(ui.getPreferredSize()); 

    zoomUp = new JButton("Zoom +"); 
    zoomUp.setAlignmentX(LEFT_ALIGNMENT); 
    zoomUp.setBorder(BorderFactory.createLineBorder(Color.RED)); 
    ui.add(zoomUp); 
    zoomDown = new JButton("Zoom -"); 
    //ui.add(zoomDown); 
    choice = new JLabel("Choisir une fractale : "); 
    //ui.add(choice); 
    Object[] elements = new Object[]{"Mandelbrot", "Julia", "Buddhabrot"}; 
    fractalList = new JComboBox<Object>(elements); 
    //fractalList.setBorder(BorderFactory.createLineBorder(Color.RED)); 
    fractalList.setAlignmentX(LEFT_ALIGNMENT); 
    fractalList.setMaximumSize(new Dimension(Short.MAX_VALUE,20)); 
    //ui.add(fractalList); 



    gbc.weighty=1; 
    gbc.ipadx=300; 
    gbc.gridheight=1; 
    gbc.fill=GridBagConstraints.VERTICAL; 
    gbc.gridx=0; 
    gbc.gridy=0; 

    window.add(ui,gbc); 

    display=new JPanel(); 
    display.setBackground(Color.RED); 
    gbc.weightx=1; 
    gbc.gridheight=1; 
    gbc.gridwidth=1; 
    gbc.fill=GridBagConstraints.BOTH; 
    gbc.gridx=1; 
    gbc.gridy=0; 
    window.add(display,gbc); 
    window.setVisible(true); 
    } 

문제는 JPanel ui에서 온다 : 여기

몇 가지 코드입니다. 비어있는만큼 크기는 원하는대로입니다. 그러나 모든 구성 요소를 추가하면 무게가 증가합니다.

setMaxSize()을 사용해 보았지만 크기가 조정 되어도 JPanel display에 표시하려는 항목에 문제가 발생할 수 있습니다. 다시 GridBagLayout을 사용하지 않는 것이 좋습니다.

누군가 아이디어가 있습니까?

+0

1) * "여기에 몇 가지 코드가 있습니다."* 더 나은 도움을 받으려면 [MCVE] 또는 [Short, Self Contained, Correct Example] (http://www.sscce.org/)를 게시하십시오. 2) ASCII 아트 또는 GUI의 * 의도 된 * 레이아웃의 간단한 그림을 최소한의 크기로 제공하고, 크기를 조정할 수 있으면 더 많은 너비와 높이로 추가 공간을 사용하는 방법을 보여줍니다. 3) * "다시'GridBagLayout'을 사용하지 않는 것이 좋을 것입니다. * * 읽는 법 *"스크류 드라이버를 피하는 것이 좋을 것입니다. 나사를 망치로 다시 눌러야하나요? "*. 작업에 적합한 도구를 사용하십시오. 나는 이것이 GBL인지 확실하지 않지만 그것을 배제하지 않는다. –

답변

0

프레임을 분할하고 GridBagLayout과의 전투를 원하지 않는다면 BorderLayout을 사용할 수 있습니다.

그런 다음 한 패널을 BorderLayout.WEST에 추가하고 다른 패널을 BorderLayout.EAST 위치에 추가하십시오. setPreferredSize를 호출하여 원하는 너비와 높이를 수정해야합니다.

귀하의 코드를 일부 변경했습니다. 그것을 체크 아웃 : 당신보다 더 복잡한 일을해야하는 경우 miglayout으로 갈 수

public class TestFrame { 
    private JButton zoomUp, zoomDown; 
    private JComboBox fractalList; 
    private JLabel choice, space; 
    private JPanel ui, display; 
    private JFrame window; 

    public TestFrame(String title, int size_X, int size_Y) { 
     window = new JFrame(); 
     window.setTitle(title); 
     window.setSize(size_X, size_Y); 
     window.setLocationRelativeTo(null); 
     window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     window.setResizable(false); 
     window.setLayout(new BorderLayout()); 

     ui = new JPanel(); 
     ui.setPreferredSize(new Dimension(size_X/2,size_Y)); 
     ui.setBackground(Color.GRAY); 
     ui.setBorder(BorderFactory.createTitledBorder("Interface de Controle et Options")); 
     BoxLayout uiLayout = new BoxLayout(ui, BoxLayout.PAGE_AXIS); 
     ui.setLayout(uiLayout); 

     zoomUp = new JButton("Zoom +"); 
     // zoomUp.setAlignmentX(LEFT_ALIGNMENT); 
     zoomUp.setBorder(BorderFactory.createLineBorder(Color.RED)); 
     ui.add(zoomUp); 
     zoomDown = new JButton("Zoom -"); 
     ui.add(zoomDown); 
     choice = new JLabel("Choisir une fractale : "); 
     ui.add(choice); 
     Object[] elements = new Object[] { "Mandelbrot", "Julia", "Buddhabrot" }; 
     fractalList = new JComboBox<Object>(elements); 
     // fractalList.setBorder(BorderFactory.createLineBorder(Color.RED)); 
     // fractalList.setAlignmentX(LEFT_ALIGNMENT); 
     fractalList.setMaximumSize(new Dimension(Short.MAX_VALUE, 20)); 
     ui.add(fractalList); 

     window.add(ui, BorderLayout.WEST); 

     display = new JPanel(); 
     display.setBackground(Color.RED); 
     display.setPreferredSize(new Dimension(size_X/2,size_Y)); 

     window.add(display, BorderLayout.EAST); 
     window.setVisible(true); 
    } 

    public static void main(String[] args) { 
     new TestFrame("test of BorderLayout with WEST and EAST", 800, 600); 
    } 
} 

.

관련 문제