主窗体是个JFrame;里面有四个JPanel;位置在上,左,下各放一个,中间来个放大的.
只希望窗口大小变化时.只有中间的JPanel大小铺满剩余位置.
上下两个JPanel高度不变,宽度自动适应整个窗体;
左边的JPanel 宽度不变,高度自动适应;
左上角和左下角的交错部分,不能交错.有代码区分处理即可;
关键是正中间最大块部分要占满剩余位置.窗体大小可变.
不希望在窗口尺寸变化的事件里处理这个问题;
类似于BorderLayout的东南西北中.大概的样子;
上左下三个区域要是能自动隐藏显示就更好了;小弟新手请尽量请清楚,简洁.谢谢!Swing布局java
只希望窗口大小变化时.只有中间的JPanel大小铺满剩余位置.
上下两个JPanel高度不变,宽度自动适应整个窗体;
左边的JPanel 宽度不变,高度自动适应;
左上角和左下角的交错部分,不能交错.有代码区分处理即可;
关键是正中间最大块部分要占满剩余位置.窗体大小可变.
不希望在窗口尺寸变化的事件里处理这个问题;
类似于BorderLayout的东南西北中.大概的样子;
上左下三个区域要是能自动隐藏显示就更好了;小弟新手请尽量请清楚,简洁.谢谢!Swing布局java
只希望窗口大小变化时.只有中间的JPanel大小铺满剩余位置.
上下两个JPanel高度不变,宽度自动适应整个窗体;
左边的JPanel 宽度不变,高度自动适应;===============这正是 BorderLayout 的默认行为没错,
用不着试,BorderLayout 不知用过多少次了。
Swing不熟,接分,顺便帮楼主顶贴!
我就是想要这样的结果.现在做的结构一片空白.
是不是都想看看初学者的笑话呀.我把图片和代码发上来.大家修改一下.唉,呵呵
frame = new JFrame();
frame.setBounds(100, 100, 400, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pnlTitle = new JPanel();
pnlTitle.setBackground(Color.ORANGE);
pnlTitle.setSize(200, 0);
frame.getContentPane().add(pnlTitle, BorderLayout.NORTH);
pnlMenu = new JPanel();
pnlMenu.setBackground(Color.CYAN);
pnlMenu.setSize(0, 200);
frame.getContentPane().add(pnlMenu, BorderLayout.WEST);
pnlWork = new JPanel();
pnlWork.setBackground(Color.MAGENTA);
pnlWork.setSize(0, 0);
frame.getContentPane().add(pnlWork, BorderLayout.CENTER);
import java.awt.*;public class Hello extends JPanel {
public Hello() {
JPanel topPanel = new JPanel();
topPanel.setBackground(Color.RED);
topPanel.setPreferredSize(new Dimension(1, 100)); JPanel bottomPanel = new JPanel();
bottomPanel.setBackground(Color.GREEN);
bottomPanel.setPreferredSize(new Dimension(1, 100)); JPanel leftPanel = new JPanel();
leftPanel.setBackground(Color.BLACK);
leftPanel.setPreferredSize(new Dimension(200, 1)); JPanel rightPanel = new JPanel();
rightPanel.setBackground(Color.BLUE); double f = TableLayout.FILL;
double p = TableLayout.PREFERRED;
double b = 0;
double[] col = {b, p, f, b};
double[] row = {b, p, f, p, b};
setLayout(new TableLayout(col, row)); add(topPanel, "1, 1, 2, 1");
add(leftPanel, "1, 2");
add(rightPanel, "2, 2");
add(bottomPanel, "1, 3, 2, 3");
} private static void createAndShowGui() {
JFrame frame = new JFrame(""); frame.setContentPane(new Hello()); // Set frame's close operation and location in the screen.
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 600);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
} public static void main(String[] args) throws Exception {
createAndShowGui();
}
}
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;public class LayoutTest {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() { @Override
public void run() {
JFrame f = new JFrame("Test Layout");
Container c = f.getContentPane(); // BorderLayout by default
Dimension size = new Dimension(100, 100);
c.add(newPanel(Color.BLUE, size), BorderLayout.NORTH);
c.add(newPanel(Color.GREEN, size), BorderLayout.WEST);
c.add(newPanel(Color.RED, size), BorderLayout.SOUTH);
c.add(newPanel(Color.WHITE, size), BorderLayout.CENTER);
f.pack();
f.setMinimumSize(f.getSize());
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setVisible(true);
}
});
}
private static JComponent newPanel(Color color, Dimension preferredSize) {
assert color != null;
assert preferredSize != null;
JComponent c = new JPanel();
c.setBackground(color);
c.setPreferredSize(preferredSize);
return c;
}
}
用不着试,BorderLayout 不知用过多少次了
先谢谢 RAISTLIC 了.一看说话就知道常常在一线的人才; 认真看了你的代码.明白了为什么;我主要的问题没有明白底层了一些基础东西;setPreferredSize 和SETSIZE有区别;就这句话我的问题解决;那位什么"公孙二狗 ",看你名字就知道你是个什么鸟了;确实你写程序比我们都牛.只是做人太差;新人本来就是知道得太少,而且想多学点.你一来就叫人家去安装什么控件;干嘛不叫我去请人开发呢;就一句代码修改一下就好了;你还讲这么多,不知道你的技术是怎么练成的; raistlic 虽说没有看怎么看我代码起码认真看了问题.去动手处理好了 ,有结果;更不会看不起新人;
大家可以去看看别人写的说明,很有帮助的.当然被某人删除了我也没办法,大家都不会也好天天在这里来提小问题.:http://tieba.baidu.com/p/2101752057
另外间距在这里设置 new BorderLayout(5, 5) ;修改一下可能你需要的.
另外居中可以一句话:frame.setLocationRelativeTo(null);