Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPanel的大小调整_Java_Swing - Fatal编程技术网

Java JPanel的大小调整

Java JPanel的大小调整,java,swing,Java,Swing,我有三个带有流程布局的Jpanel,它们被添加到主面板中。现在,当我收缩“主面板”时,我希望右面板始终可见-无论我是从左收缩还是从右收缩 例如:在eclipse中,当您尝试收缩代码查看器时,最大化按钮始终可见,我希望使用带有三个面板的swing可以实现相同的行为 谢谢。不确定我是否理解您的问题,但您是否尝试过BorderLayout 试试这个: 使用方法控制窗口的最大和最小值。我使用LayoutManager创建了一个自定义布局 public TitleBarLayout() { } @Ov

我有三个带有流程布局的Jpanel,它们被添加到主面板中。现在,当我收缩“主面板”时,我希望右面板始终可见-无论我是从左收缩还是从右收缩

例如:在eclipse中,当您尝试收缩代码查看器时,最大化按钮始终可见,我希望使用带有三个面板的swing可以实现相同的行为


谢谢。

不确定我是否理解您的问题,但您是否尝试过
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自动生成的方法存根
返回“这是我的布局”;
}
}