SWING 布局小问题,顶者有分主窗体是个JFrame;里面有四个JPanel;位置在上,左,下各放一个,中间来个放大的.只希望窗口大小变化时.只有中间的JPanel大小铺满剩余位置.上下两个JPanel高度不变,宽度自动适应整个窗体;左边的JPanel 宽度不变,高度自动适应;左上角和左下角的交错部分,不能交错.有代码区分处理即可;关键是正中间最大块部分要占满剩余位置.窗体大小可变.不希望在窗口尺寸变化的事件里处理这个问题;类似于BorderLayout的东南西北中.大概的样子;上左下三个区域要是能自动隐藏显示就更好了;小弟新手请尽量请清楚,简洁.谢谢! 对Swing不熟[解决办法]新手帮你顶一个[解决办法]要好好研究一下[解决办法]一般会把最大化按钮禁用,如果程序必须用最大化就呀借助事件来实现了。如果没有使用布局管理器在setBounds(x,y,width,height)时里面的参数最好是通过其他相邻或父窗体计算出来,不要写具体的数字。窗体改变后调用一下repaint()方法试试。[解决办法]swing真心不熟,但是还是来接分[解决办法]楼主说的情况就是 BorderLayout 的默认行为。[解决办法]
[解决办法]不学无术啊,这个是最简单的布局之一。[解决办法]太好了,我也想了解一下。初学者都这样的。[解决办法]顶一顶,好久不用swing[解决办法]你应该是在每个布局位置中放置一个JPanel,你只需要控制这个JPanel的大小就可以,SWING的布局本来就很扯,多测试几个就可以出效果了[解决办法]用borderLayout可以实现嘛[解决办法]TableLayout下载: http://download.csdn.net/detail/inhibitory/5815815
import info.clearthought.layout.TableLayout;import javax.swing.*;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(); }}
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.BorderLayout;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; }}
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; }}
另外间距在这里设置 new BorderLayout(5, 5) ;修改一下可能你需要的.另外居中可以一句话:frame.setLocationRelativeTo(null);