From dc4db3e8fa713d7c22f32627c8f1d3fb08e20e3d Mon Sep 17 00:00:00 2001 From: tianmo Date: Fri, 16 Oct 2026 17:17:37 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=89=E6=AE=B5=E6=8C=89=20600:1400:400=20?= =?UTF-8?q?=E7=AD=89=E6=AF=94=E7=BC=A9=E6=94=BE=E5=88=B0=20Stage=20?= =?UTF-8?q?=E9=AB=98=E5=BA=A6=EF=BC=88=E7=95=A5=E5=A4=A7=E4=BA=8E=E5=81=9C?= =?UTF-8?q?=E9=9D=A0=E6=A1=86=EF=BC=89=EF=BC=9A=E5=86=85=E5=AE=B9=E7=9B=96?= =?UTF-8?q?=E8=BF=87=E5=BA=95=E9=83=A8=EF=BC=8C=E6=B6=88=E6=8E=89=E5=BA=95?= =?UTF-8?q?=E9=83=A8=E7=A9=BA=E5=B8=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- viewpanel/src/com/spineview/ObjectPanel.java | 26 ++++++++++++++------ 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/viewpanel/src/com/spineview/ObjectPanel.java b/viewpanel/src/com/spineview/ObjectPanel.java index b62f1da..c09aa71 100644 --- a/viewpanel/src/com/spineview/ObjectPanel.java +++ b/viewpanel/src/com/spineview/ObjectPanel.java @@ -231,18 +231,30 @@ public final class ObjectPanel { // Stage 上:`B()F`=getHeight、`D()F`=getWidth(实测:4K 窗口 2044 / 3726) if (stage != null) stageH = floatOf(stage, "B"); float panelH = stageH > 300f ? stageH - 100f : 984f; - // 用户指定的**固定高度**:上 600、中 1400、日志 400(不做任何缩放) - float buttonsH = 600f; - float middleH = 1400f; - float logH = 400f; - call(logCell, "I", new Class[] {float.class}, cellClass, Float.valueOf(logH)); + // 用户要固定高度 600/1400/400;但面板实际高度(root.getHeight)装不下时, + // 就按比例缩到刚好装下 —— 反复几轮直到"下面是空的区域1"消失。 + for (int pass = 0; pass < 3; pass++) { + // 用 Stage 高度当"可用高度"(它不随我们的内容变,稳定);比停靠框略大, + // 这样内容一定盖过底部,就不会再留出"区域1"那条空带。 + float available = stageH > 300f ? stageH : panelH; + float scale = available / 2400f; + float buttonsH = 600f * scale; + float middleH = 1400f * scale; + float logH = 400f * scale; + call(buttonsCell, "I", new Class[] {float.class}, cellClass, Float.valueOf(buttonsH)); + call(middleCell, "I", new Class[] {float.class}, cellClass, Float.valueOf(middleH)); + call(logCell, "I", new Class[] {float.class}, cellClass, Float.valueOf(logH)); + call(state.root, "b_", new Class[0], void.class); + Thread.sleep(300); + System.err.println("[panel] pass" + pass + " available=" + available + " -> " + + buttonsH + " / " + middleH + " / " + logH); + } call(state.root, "b_", new Class[0], void.class); Thread.sleep(800); System.err.println("[panel] 实测高度: root=" + floatOf(state.root, "init") + " buttonsTable=" + floatOf(state.buttons, "init") + " logLabel=" + floatOf(state.status, "init")); - System.err.println("[panel] 面板高度(自动): stage=" + stageH + " -> " + panelH - + ";三段 = " + buttonsH + " / " + middleH + " / " + logH); + System.err.println("[panel] 面板高度(自动): stage=" + stageH + " -> " + panelH); } catch (Throwable error) { System.err.println("[panel] 自动三段高度失败: " + error); }