读书人

SWING 布局小疑点,顶者有分

发布时间: 2013-08-01 15:23:18 作者: rapoo

SWING 布局小问题,顶者有分
主窗体是个JFrame;里面有四个JPanel;位置在上,左,下各放一个,中间来个放大的.
只希望窗口大小变化时.只有中间的JPanel大小铺满剩余位置.
上下两个JPanel高度不变,宽度自动适应整个窗体;
左边的JPanel 宽度不变,高度自动适应;
左上角和左下角的交错部分,不能交错.有代码区分处理即可;
关键是正中间最大块部分要占满剩余位置.窗体大小可变.
不希望在窗口尺寸变化的事件里处理这个问题;
类似于BorderLayout的东南西北中.大概的样子;
上左下三个区域要是能自动隐藏显示就更好了;小弟新手请尽量请清楚,简洁.谢谢!

SWING 布局小疑点,顶者有分 对Swing不熟
[解决办法]
新手帮你顶一个SWING 布局小疑点,顶者有分
[解决办法]
要好好研究一下
[解决办法]
一般会把最大化按钮禁用,如果程序必须用最大化就呀借助事件来实现了。如果没有使用布局管理器在setBounds(x,y,width,height)时里面的参数最好是通过其他相邻或父窗体计算出来,不要写具体的数字。

窗体改变后调用一下repaint()方法试试。
[解决办法]
swing真心不熟,但是还是来接分SWING 布局小疑点,顶者有分
[解决办法]
楼主说的情况就是 BorderLayout 的默认行为。
[解决办法]


Swing不熟,接分,顺便帮楼主顶贴!
[解决办法]
帮楼主顶下SWING 布局小疑点,顶者有分
[解决办法]
你把你的代码发上来,我去改改试试,
自己写一个的工作量就有点大了。
我一般都是用绝对布局的
用九宫格的方式布局比较少,只是感觉应该把四周的控件定死,应该可以的。
[解决办法]
不会swingSWING 布局小疑点,顶者有分


[解决办法]
不学无术啊,这个是最简单的布局之一。
[解决办法]
太好了,我也想了解一下。初学者都这样的。
[解决办法]
顶一顶,好久不用swing
[解决办法]
你应该是在每个布局位置中放置一个JPanel,你只需要控制这个JPanel的大小就可以,SWING的布局本来就很扯,多测试几个就可以出效果了
[解决办法]
用borderLayout可以实现嘛
[解决办法]
TableLayout下载: http://download.csdn.net/detail/inhibitory/5815815
SWING 布局小疑点,顶者有分

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();
}
}


[解决办法]

[解决办法]
额,我看你问题上的图片好像是用了分割面板,splitpane
[解决办法]
使用BorderLayout,布局没有做任何改动:



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;
}
}


[解决办法]
SWING 布局小疑点,顶者有分
[解决办法]
SWING 布局小疑点,顶者有分
[解决办法]
SWING 布局小疑点,顶者有分
[解决办法]
raistlic 这正是 BorderLayout 的默认行为没错,
用不着试,BorderLayout 不知用过多少次了
先谢谢 RAISTLIC 了.一看说话就知道常常在一线的人才; 认真看了你的代码.明白了为什么;我主要的问题没有明白底层了一些基础东西;setPreferredSize 和SETSIZE有区别;就这句话我的问题解决;

那位什么"公孙二狗 ",看你名字就知道你是个什么鸟了;确实你写程序比我们都牛.只是做人太差;新人本来就是知道得太少,而且想多学点.你一来就叫人家去安装什么控件;干嘛不叫我去请人开发呢;就一句代码修改一下就好了;你还讲这么多,不知道你的技术是怎么练成的; raistlic 虽说没有看怎么看我代码起码认真看了问题.去动手处理好了 ,有结果;更不会看不起新人;
大家可以去看看别人写的说明,很有帮助的.当然被某人删除了我也没办法,大家都不会也好天天在这里来提小问题.:http://tieba.baidu.com/p/2101752057

[解决办法]
来张图楼主看一下.代码只要修改所有的SETSIZE为setPreferredSize 即可.先解决问题再说;


另外间距在这里设置 new BorderLayout(5, 5) ;修改一下可能你需要的.
另外居中可以一句话:frame.setLocationRelativeTo(null);
SWING 布局小疑点,顶者有分

读书人网 >J2SE开发

热点推荐