2014-02-14 3 views
-1

У меня есть три Jpanel с раскладкой Flow, и они находятся в строке, добавленной в Main Panel. Теперь, когда я сжимаю «главную панель», я хочу, чтобы панель справа была всегда видна - независимо от того, сжимаюсь ли я слева или справа.Изменение размера JPanel

Например: В затмении, когда вы пытаетесь сжать программу просмотра кода, кнопка максимизации всегда видна, я хочу, чтобы такое же поведение использовалось с помощью качания с тремя панелями.

Спасибо.

ответ

0

Я использовал LayoutManager для создания настраиваемого макета.

public TitleBarLayout() { 

} 

@Override 
public void addLayoutComponent(String name, Component comp) { 
    if (comp == null) { 
     throw new RuntimeException("Component cannot be null "); 
    } 
    synchronized (comp.getTreeLock()) { 

     switch (name) { 
     case RIGHT: 
      right = comp; 
      rightBound = comp.getPreferredSize(); 
      break; 
     case LEFT: 
      left = comp; 
      leftBound = comp.getPreferredSize(); 
      break; 
     case MIDDLE: 
      middle = comp; 
      middleBound = comp.getPreferredSize(); 
      break; 
     default: 
      Logger.info("Invalid layout option" + name); 
      break; 
     } 
    } 
} 

@Override 
public void removeLayoutComponent(Component comp) { 
    // TODO Auto-generated method stub 

} 

@Override 
public Dimension preferredLayoutSize(Container parent) { 
    new BorderLayout(); 
    return null; 
} 

@Override 
public Dimension minimumLayoutSize(Container parent) { 
    if (right != null) { 
     return right.getSize(); 
    } 
    return new Dimension(16, 16); 
} 

@Override 
public void layoutContainer(Container parent) { 
    synchronized (parent.getTreeLock()) { 
     refresh(); 
     Rectangle parentBounds = parent.getBounds(); 
     System.out.println("Middle Element = " + middleBound); 
     /* adjust the right side */ 
     right.setBounds(parent.getSize().width - rightBound.width, y, 
       rightBound.width, rightBound.height); 
     /* parent < middle + right */ 
     if (parentBounds.getWidth() < middleBound.getWidth() 
       + rightBound.getWidth()) { 
      middle.setBounds(y, y, parentBounds.width - rightBound.width, 
        middleBound.height); 

     } else if (parentBounds.getWidth() < leftBound.getWidth() 
       + middleBound.getWidth() + rightBound.getWidth()) { 
      /* parent < left + middle + right */ 
      middle.setBounds(parentBounds.width - rightBound.width 
        - middleBound.width, y, middleBound.width, 
        middleBound.height); 
      left.setBounds(parentBounds.width - rightBound.width 
        - middleBound.width - leftBound.width, y, 
        leftBound.width, leftBound.height); 

     } else { 
      /* parent > left + middle + right */ 
      middle.setBounds(leftBound.width + middleBound.width, y, 
        middleBound.width, middleBound.height); 
      left.setBounds(0, y, leftBound.width, leftBound.height); 
     } 
    } 

} 

private void refresh() { 
    // rightBound = right.getPreferredSize(); 
    middleBound = middle.getPreferredSize(); 
    leftBound = left.getPreferredSize(); 

} 

@Override 
public String toString() { 
    // TODO Auto-generated method stub 
    return "This is my layout"; 
} 

}

Смежные вопросы