Java JPanel的大小调整
我有三个带有流程布局的Jpanel,它们被添加到主面板中。现在,当我收缩“主面板”时,我希望右面板始终可见-无论我是从左收缩还是从右收缩 例如:在eclipse中,当您尝试收缩代码查看器时,最大化按钮始终可见,我希望使用带有三个面板的swing可以实现相同的行为Java JPanel的大小调整,java,swing,Java,Swing,我有三个带有流程布局的Jpanel,它们被添加到主面板中。现在,当我收缩“主面板”时,我希望右面板始终可见-无论我是从左收缩还是从右收缩 例如:在eclipse中,当您尝试收缩代码查看器时,最大化按钮始终可见,我希望使用带有三个面板的swing可以实现相同的行为 谢谢。不确定我是否理解您的问题,但您是否尝试过BorderLayout 试试这个: 使用方法控制窗口的最大和最小值。我使用LayoutManager创建了一个自定义布局 public TitleBarLayout() { } @Ov
谢谢。不确定我是否理解您的问题,但您是否尝试过
BorderLayout
试试这个:
使用方法控制窗口的最大和最小值。我使用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";
}
public TitleBarLayout(){
}
@凌驾
public void addLayoutComponent(字符串名称,组件组成){
if(comp==null){
抛出新的RuntimeException(“组件不能为null”);
}
已同步(comp.getTreeLock()){
交换机(名称){
案例权利:
右=comp;
rightBound=comp.getPreferredSize();
打破
案例左:
左=复合;
leftBound=comp.getPreferredSize();
打破
案例中:
中间=比较;
middleBound=comp.getPreferredSize();
打破
违约:
Logger.info(“无效布局选项”+名称);
打破
}
}
}
@凌驾
公共void removeLayoutComponent(组件组件组件){
//TODO自动生成的方法存根
}
@凌驾
公共维度preferredLayoutSize(容器父级){
新的边界布局();
返回null;
}
@凌驾
公共维度minimumLayoutSize(容器父级){
if(右!=null){
返回right.getSize();
}
返回新维度(16,16);
}
@凌驾
公共无效布局容器(容器父级){
已同步(父级.getTreeLock()){
刷新();
矩形parentBounds=parent.getBounds();
System.out.println(“中间元素=”+中间边界);
/*调整右侧*/
right.setBounds(parent.getSize().width-rightbund.width,y,
右边界。宽度,右边界。高度);
/*父项<中间+右侧*/
if(parentBounds.getWidth()左+中+右*/
middle.setBounds(leftBound.width+middleBound.width,y,
中行。宽度,中行。高度);
left.setBounds(0,y,leftBound.width,leftBound.height);
}
}
}
私有无效刷新(){
//rightBound=right.getPreferredSize();
middleBound=middle.getPreferredSize();
leftBound=left.getPreferredSize();
}
@凌驾
公共字符串toString(){
//TODO自动生成的方法存根
返回“这是我的布局”;
}
}