我阅读了一些有关Java布局管理器的信息,建议是MigLayout.我的问题是,我没有找到任何教程或简单的逐步文档.
所以我想知道这一切是如何运作的,但我不知道如何.
希望,这不是微不足道的.
提前谢谢,guerda
我正在尝试在我的应用程序中布局一些JLabel,如下例所示:
我一直有此JLabel在中间,其他的JLabel数量变量可以通过选择好的数列/行,并在空格设置一些空的JLabel,但我去从1到30我曾尝试网格布局无法获得良好的结果,并且无法找到如何使用MigLayout,任何人都有一个良好的布局解决方案或任何其他解决方案.
PS:我不想展示圆圈,只是为了表明JLabel排成一个圆圈.
我需要将JLabel垂直放置在一些JButton上,就像游戏菜单一样.他们都应该集中.我已经下载了MigLayout,但我不确定如何使用它,所以我只想要一种方法来垂直定位我的组件并居中,MigLayout与否.另外,我不想使用IDE GUI设计器.
我开始使用MiGLayout进行GUI设计,我需要的一个功能是根据其他组件的状态显示/隐藏某些组件.
当我注意到MiGLayout支持的一个组件约束时,我自己会编码hidemode
.
这是否符合我的想法?如果是这样,假设hidemode
已经设置,我该如何触发隐藏/取消隐藏动作?(查看文档后,我能够找到如何设置hidemode
,但之后不再使用它)
hidemode
设置组件的隐藏模式.如果已在"隐藏"模式中指定了隐藏模式,则可以通过组件约束覆盖此模式.隐藏模式指定了布局管理器应如何处理不可见的组件.模式是:
0 - 默认.意味着隐藏组件的处理方式与可见组件完全相同.
1 - 组件的大小(如果不可见)将设置为0,0.2
- 组件的大小(如果不可见)将设置为0,0并且间隙也将在其周围设置为0.
3 - 不可见组件根本不会参与布局,例如它不会占用网格单元.
示例:"hidemode 1"
到目前为止我所能找到的是这个(开放的)Sun bug/RFE条目,获得426 506票:
http://bugs.sun.com/view_bug.do?bug_id=6530906
它在RFE列表中位居第三.
很多人都表示它将被包含在Java 7中......但是有没有人有关于是否包含MiGLayout的任何明确信息?
回答
嗯,似乎Chad有一个观点 - 它不在任何地方的官方列表上,时间肯定会消失,所以除非发生重大事件,否则可以说MiGLayout显然不会包含在Java 7中,尽管有426票来自社区.太糟糕了.
我有一个JScrollpane
,有一个JPanel
在里面(与面板包含一些JLabel
S).
我想调整滚动窗格的大小以实际更改其大小(可能低于内部组件的首选大小),而不仅仅是视口的大小.
目标是当用户缩小滚动窗格太小时,内部面板优雅地消失(使用我的miglayout中的特定缩小优先级等).
大约一个半月前我开始使用MiGLayout,一切都很简单,效果很好.我还有一个问题,我无法修复.
假设我想要一行在最右侧有两个按钮和一个居中的标题,当我这样做时,标题实际上并没有居中:
("这个是JPanel")
this.add(labelTitle, "split, span, center");
this.add(closeButton, "east");
this.add(mainMenuButton, "east");
Run Code Online (Sandbox Code Playgroud)
发生的事情是"labelTitle"在放置按钮后的剩余可用空间中居中,但我实际上希望它相对于整个JPanel而不是仅剩余空间居中.
我可以使用哪些参数来获得所需的效果?我知道我可以使用绝对定位,但我不想这样做,因为它在我的案例中首先击败了使用MiGLayout的目的.
如果我像这样使用带有MigLayout的JTextArea:
MigLayout thisLayout = new MigLayout("", "[][grow]", "[]20[]");
this.setLayout(thisLayout);
{
jLabel1 = new JLabel();
this.add(jLabel1, "cell 0 0");
jLabel1.setText("jLabel1");
}
{
jTextArea1 = new JTextArea();
this.add(jTextArea1, "cell 0 1 2 1,growx");
jTextArea1.setText("jTextArea1");
jTextArea1.setLineWrap(false);
}
Run Code Online (Sandbox Code Playgroud)
然后,当调整窗口大小时,JTextArea会完美地缩小和缩小.当我将linewrap设置为true时,当我再次缩小窗口时,JTextArea不会缩小.我非常感谢任何帮助.谢谢
马塞尔
我正在尝试创建一个看起来像这样的布局:
+---+--------+---+
| | | |
| | | |
+---+ +---+
| | | |
| | | |
+---+--------+---+
Run Code Online (Sandbox Code Playgroud)
中央细胞应该是其他细胞的两倍.我正在尝试使用这样的代码实现此目的:
val panel = new JPanel(new MigLayout("debug", "grow","grow" ))
panel.add(new JPanel)
panel.add(new JPanel, "span 2 2")
panel.add(new JPanel, "wrap")
panel.add(new JPanel)
panel.add(new JPanel)
Run Code Online (Sandbox Code Playgroud)
但结果我所有的细胞都有相同的宽度:
+----+----+----+
| | | |
| | | |
+----+ +----+
| | | |
| | | |
+----+----+----+
Run Code Online (Sandbox Code Playgroud)
我做错了什么?我正在使用Scala,但我不认为这里存在问题.
更新 也许有人可以解释为什么这不起作用.即使我尝试从QuickStart指南中重现示例,它也不起作用:
alt text http://www.freeimagehosting.net/uploads/d306693273.png
我的代码:
val panel = new JPanel(new MigLayout("debug", "grow","grow" )) …
Run Code Online (Sandbox Code Playgroud) 我正在使用miglayout创建一个表单,其中有JTextFields(简短的输入答案)以及JTextAreas(更长的答案).问题是双重的.
从右/左更改为右/填充后: alt文本http://grab.by/3RMk 您可以看到边界排列,但仍然存在差距.我尝试设置novisualpadding但这并没有解决它.
源代码:
package test2;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import net.miginfocom.swing.MigLayout;
public class Test extends JPanel {
private static final int NUM_CHARACTERS_WIDTH = 20;
private static final int NUM_ROWS = 5;
public Test() {
setLayout(new MigLayout(
"wrap 2",
// Align text labels on the so their right edge meets left edge of the text fields
"[right][left]"
));
add(new JLabel("Text field:"));
add(new JTextField(NUM_CHARACTERS_WIDTH));
add(new JLabel("No scrollpane text area:")); …
Run Code Online (Sandbox Code Playgroud) java ×10
miglayout ×10
swing ×8
layout ×2
grid-layout ×1
gui-design ×1
java-7 ×1
jscrollpane ×1
jtextarea ×1
scala ×1