diff --git a/viewpanel/src/com/spineview/ObjectPanel.java b/viewpanel/src/com/spineview/ObjectPanel.java index 0e8a664..00287c4 100644 --- a/viewpanel/src/com/spineview/ObjectPanel.java +++ b/viewpanel/src/com/spineview/ObjectPanel.java @@ -121,33 +121,43 @@ public final class ObjectPanel { Object[] top = {refresh, newBone, newSlot, newBBox, newPath, delete, rename, inspect, setValue}; Object buttons = tableClass.getConstructor().newInstance(); call(buttons, Obf.TABLE_TOP, new Class[0], tableClass); + call(buttons, Obf.TABLE_LEFT, new Class[0], tableClass); // 按钮块靠左上(不然整宽后会居中) for (int i = 0; i < top.length; i++) { Object buttonCell = call(buttons, Obf.TABLE_ADD, new Class[] {actorClass}, cellClass, top[i]); layoutCell(buttonCell, Obf.CELL_LEFT); - if (i % 2 == 1) call(buttons, Obf.TABLE_ROW, new Class[0], cellClass); + // 每个按钮一行:上段是**一条整带**(不要左右两列),整体读起来才是"上/中/下" + call(buttons, Obf.TABLE_ROW, new Class[0], cellClass); } call(buttons, Obf.TABLE_ROW, new Class[0], cellClass); Object nameCell = call(buttons, Obf.TABLE_ADD, new Class[] {actorClass}, cellClass, state.nameField); layoutCell(nameCell, Obf.CELL_LEFT); // 上段:按钮块(自适应高度,紧贴顶部) Object cell = call(root, Obf.TABLE_ADD, new Class[] {actorClass}, cellClass, buttons); - layoutCell(cell, Obf.CELL_LEFT); + layoutCell(cell, Obf.CELL_LEFT, Obf.CELL_FILL_X); call(root, Obf.TABLE_ROW, new Class[0], cellClass); - // 中段+下段放进**同一个竖直容器**:列表在上面 expand+fill(一直拉到日志上沿), - // 日志紧跟其下一行 —— 结构上保证"列表下边和日志区紧贴",不依赖任何高度猜测。 - Object content = tableClass.getConstructor().newInstance(); - call(content, Obf.TABLE_TOP, new Class[0], tableClass); - Object contentCell = call(content, Obf.TABLE_ADD, new Class[] {actorClass}, cellClass, scroll); - layoutCell(contentCell, Obf.CELL_TOP, Obf.CELL_EXPAND, Obf.CELL_FILL); - state.listCell = contentCell; - state.content = content; + // 上/中/下 = 根表格的**三个单元格**(这样 setDebug 画出来就是三条带): + // 上 = 按钮块(已经在上面加过) + // 中 = 列表/Inspector:固定高度 500 + fillX + expand + fill(下边自然顶到日志上沿) + // 下 = 日志 Label:自然高度贴底 state.root = root; - call(content, Obf.TABLE_ROW, new Class[0], cellClass); - Object logCell = call(content, Obf.TABLE_ADD, new Class[] {actorClass}, cellClass, - state.status); - layoutCell(logCell, Obf.CELL_LEFT); - cell = call(root, Obf.TABLE_ADD, new Class[] {actorClass}, cellClass, content); - layoutCell(cell, Obf.CELL_EXPAND, Obf.CELL_FILL); + cell = call(root, Obf.TABLE_ADD, new Class[] {actorClass}, cellClass, scroll); + layoutCell(cell, Obf.CELL_TOP, Obf.CELL_FILL_X, Obf.CELL_EXPAND, Obf.CELL_FILL); + try { + // 中段固定高度:Cell.height(float) 在载荷里叫 `I`(实测确认:设 900 -> 根表格 580->1080) + call(cell, "I", new Class[] {float.class}, cellClass, Float.valueOf(450f)); + } catch (Throwable error) { + System.err.println("[panel] 设置中段高度失败: " + error); + } + state.listCell = cell; + call(root, Obf.TABLE_ROW, new Class[0], cellClass); + Object logCell = call(root, Obf.TABLE_ADD, new Class[] {actorClass}, cellClass, state.status); + layoutCell(logCell, Obf.CELL_LEFT, Obf.CELL_FILL_X); + try { + // 日志段也给固定高度,否则只有一行高(视觉上等于没有这一段) + call(logCell, "I", new Class[] {float.class}, cellClass, Float.valueOf(200f)); + } catch (Throwable error) { + System.err.println("[panel] 设置日志段高度失败: " + error); + } // 中段高度固定:Cell.height(float) 在载荷里叫 `I`(描述符 (F)LdR;) // 实测确认:设 900 后根表格高度 580 -> 1080,说明它就是 height()。 try {