我正在制作一个棋盘游戏,我希望这个棋盘是一个方形停靠的西部,尺寸为frameHeight x frameHeight,我想要一个停靠在东边的侧板来填充剩下的。
本质:
西 - frameHeight x frameHeight
东 - remainingWidth x frameHeight
_________________
| | |
| | |
| WEST | EAST |
| | |
| | |
|__________|______|
目前使用MigLayout我说LARGE(西部)的高度应该是100%,但我不确定如何说宽度应该等于父高度的100%并且让SMALL(东)填充剩余的宽度
任何有理智的人都会接近这个?
答案 0 :(得分:1)
如果DockingPanel
可以覆盖部分JFrame
(具有显示和隐藏功能),则使用
GlassPane
(请注意,所有JComponents
必须为lightweight
,否则GlassPane
会落后于其他人)
JLayer
(基于Java6 JXLayer
)
最舒适的可能是使用JSplitPane
答案 1 :(得分:1)
您可以覆盖getPreferredSize()
方法,根据其父级的大小来调整面板的大小。请记住,此时您完全忽略了面板中任何内容的大小。如果您仍然关心这一点,我建议您延长JScrollPane
而不是JPanel
。
import java.awt.*;
import javax.swing.*;
public class TempProject extends JPanel{
enum Type{
SQUARE,
FILL
};
Type mytype;
public TempProject(Type type){
mytype = type;
if(mytype == Type.SQUARE){
setBackground(Color.orange);
} else if(mytype == Type.FILL){
setBackground(Color.blue);
}
}
@Override
public Dimension getPreferredSize(){
Dimension result = getParent().getSize();
if(mytype == Type.SQUARE){
//Calculate square size
result.width = result.height;
} else if(mytype == Type.FILL){
//Calculate fill size
int tempWidth = result.width - result.height;
if(tempWidth > 0){ // Ensure width stays greater than 0
result.width = tempWidth;
} else{
result.width = 0;
}
}
return result;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
JFrame f = new JFrame("Java Game");
f.setSize(700, 500);
f.setVisible(true);
f.setBackground(Color.GRAY);
Box contentPanel = Box.createHorizontalBox();
contentPanel.add(new TempProject(Type.SQUARE));
contentPanel.add(new TempProject(Type.FILL));
f.setContentPane(contentPanel);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
答案 2 :(得分:1)
MiGLayout不允许您使用引用来处理大小限制,但您可以使用pos
约束来执行此操作:
add(panel, "id large, pos 0 0 container.h container.h");
这将添加panel
看似停靠在左边缘,覆盖整个高度,宽度等于其高度。
然后您可以用以下内容填充剩余空间:
add(otherPanel, "pos large.x2 0 container.w container.h");