- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在挥杆方面遇到了问题,一整天都无法解决。如果有人在 JTextField
中输入内容,我想在 JWindow
中显示一个弹出窗口。但是,如果布局使用 JGoodies FormLayout
并在一行中包含更多组件,那么显示将会损坏。
你有什么想法吗?
在第二个文本字段中输入一些字母后的屏幕截图:
编辑 Jans 代码并连续输入“a”三次后:
Java 代码:
package eu.eyan;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JWindow;
import com.jgoodies.forms.factories.CC;
import com.jgoodies.forms.layout.FormLayout;
public class Snippet {
public static void main(String[] args) {
JTextField tf = new JTextField(10);
JPanel panel = new JPanel();
panel.setLayout(new FormLayout("p", "p,p,p"));
panel.add(new JTextField("before"), CC.xy(1, 1));
panel.add(tf, CC.xy(1, 2));
panel.add(new JTextField("after"), CC.xy(1, 3));
JFrame frame = new JFrame();
frame.setLayout(new FormLayout("p,p,p", "p"));
frame.add(new JLabel("bef"), CC.xy(1, 1));
frame.add(panel, CC.xy(2, 1));
frame.add(new JLabel("aft"), CC.xy(3, 1));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.pack();
JWindow popup = new JWindow();
popup.setLayout(new FormLayout("p", "p"));
JLabel l = new JLabel("popup");
popup.add(l, CC.xy(1, 1));
popup.pack();
tf.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
popup.setVisible(true);
}
});
}
}
最佳答案
获得布局帮助的最佳方法是提供草图你的 UI,无论是图片还是 ASCII。在这里我只是猜测什么你心里有数。
首先,FormLayout
是一个很好的布局;它创建可移植的布局。与旧的布局(例如 BoxLayout
或 GridBagLayout
)不同,它使用对话框单位而不是像素。通过这种方式,可以创建适合各种屏幕尺寸的可移植布局。实际上,FormLayout
是第一个能够创建真正可移植 UI 的 Java 布局管理器。另外两个可以做到这一点的是 MigLayout
和 GroupLayout
。
如果可以,请尝试使用 MigLayout
代替。 MigLayout
的灵感来自FormLayout
并显着改进了它。例如,在 MigLayout
中,您使用一次设置间隙,而在 FormLayout
中,您可以在进行布局时繁琐地考虑间隙。
更正:
1) 在setVisible()
方法之前调用pack()
方法。
2) 不要使用不必要的面板来创建布局。您可能看到过一些使用面板来创建布局的示例。这是因为像 BoxLayout
这样的管理器太简单了,我们需要他们。对于 FormLayout
和 MigLayout
,这是不必要的。
3) 您还需要在对话框单元中向布局添加间隙。
以下是我认为您可能想要实现的目标的示例:
package com.zetcode.formlayoutex;
import com.jgoodies.forms.factories.CC;
import com.jgoodies.forms.layout.FormLayout;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JWindow;
public class FormLayoutEx {
public static void main(String[] args) {
JTextField tf = new JTextField(10);
JFrame frame = new JFrame();
frame.setLayout(new FormLayout("6dlu, p, 5dlu, p:g, 3dlu",
"6dlu, p, 4dlu, p, 4dlu, p, 6dlu"));
frame.add(new JLabel("Before"), CC.xy(2, 2));
frame.add(new JTextField("before"), CC.xy(4, 2));
frame.add(tf, CC.xywh(2, 4, 3, 1));
frame.add(new JLabel("After"), CC.xy(2, 6));
frame.add(new JTextField("after"), CC.xy(4, 6));
frame.pack();
frame.setTitle("FormLayout example");
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
JWindow popup = new JWindow();
popup.setLayout(new FormLayout("p", "p"));
JLabel l = new JLabel("popup");
popup.add(l, CC.xy(1, 1));
popup.pack();
tf.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
popup.setVisible(true);
}
});
}
}
屏幕截图:
关于java - JGoodies FormLayout 和 JWindow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39317492/
我认为这可能是两个独立的问题。在Qt4.8中,QFormLayout是 The QFormLayout class manages forms of input widgets and their a
如屏幕截图所示,我的第二个 textLabel 和 textField 被下推在我添加左侧的文本区域之后。 我想将第二个textLabel和textField保留在第一个textLabel和textF
有人可以向我解释一下 FormLayout 上的 FormData 是如何工作的吗?我试图了解 FormAttachment 构造函数及其参数(分子、偏移量、分母)。你什么时候只需要其中一个,其中两个
我正在尝试设置一个 FormLayout使用 Vaadin 14,无论我尝试什么,标签都会出现在表单字段下方。我希望它们出现在字段的左侧,但即使让它们出现在字段上方也是朝着正确方向迈出的一步。 我相信
我正在使用 vaadin 开发 Web 应用程序,目前正在尝试实现地址簿。我查看了 github 上的官方实现并尝试构建它。 我遇到的问题与联系表有关。我希望能够单击网格中的一行并打开包含信息的表单。
我正在为复合容器使用 FormLayout。当我添加两个子项 label 和 clientArea 时,clientArea 取决于标签 -clientArea 仅在我首先添加标签时出现。 在添加子项
我是 vaadin 7 的新手,在格式方面有一些问题。 我花了几个小时但没有运气。 我有: 我的垂直布局上有 2 个表单布局。 每个表单布局上有 2 个标签。 Better check the scr
有没有一种方法可以使用 JGoodies FormLayout 在设置组件后更改其对齐方式? 例如, CellConstraints cc = new CellCosntraints(); panel
大家好,女士们, 当我让 Eclipse WindowBuilder 创建一个带有 FormLayout 的 JPanel 时,我想让这个创建是动态的,因为我正在编写的程序需要这种方式以避免 1000
我有一个 JPanel,它在 JScrollPane 中使用 FormLayout。 由于某种原因,当内容太大时,JScrollPane 不会显示滚动条。 我是 Java 新手,所以我很可能错过了一些
我很困惑为什么 QPlainTextEdit 小部件在添加到 QFormLayout 时不会垂直调整大小。在下面的代码中,文本字段正确地水平缩放,但不垂直缩放。 任何人都可以解释这种行为并提供解决方案
我在挥杆方面遇到了问题,一整天都无法解决。如果有人在 JTextField 中输入内容,我想在 JWindow 中显示一个弹出窗口。但是,如果布局使用 JGoodies FormLayout 并在一行
我要指定尺寸为200dlu < preferred component size < 600dlu 这是一个基本的三列布局,中间的列有时会是空的,但其他时候可能会有很长的字符串(文件路径等)。 我目前
我有下面的代码,其中我有一个 JPanel 需要占用 JFrame 的所有空间,但在框架完成时停止。使用表单布局时它不会。请看下面的代码 import com.jgoodies.forms.debug
这是我的代码: Composite outer = new Composite(parent, SWT.BORDER); outer.setBackground(new Color(null,
看起来 JComboBox 是一个非常非常讨厌调整高度的 Java 组件...我尝试了无数 set[Preferred|Minimum|Maximum]Size() 的组合 和各种不同的布局管理器,直
当创建像 Combo 这样简单的东西时,为什么我应该使用 FormLayout 和 FormData 而不是设置边界? 最佳答案 使用布局可以更轻松地支持不同的操作系统、用户设置、分辨率。它还有助于更
我需要一个不带滚动条的不可编辑的自动换行文本标签/字段/区域,该标签/字段/区域将随其父级(不带滚动条)调整大小。它将用于显示各种大小的文本,但“总是”有足够的空间来显示全文。在极少数情况下,用户将窗
如何使用 FormLayout(参见 here)将 Button(垂直)放置在中心?使用: final Button button = new Button(shell, SWT.NONE); but
我正在制作触摸屏键盘。我希望字母键在我按下 shift 时更改文本(从小写到大写)。这是我当前实现的一个片段: public void updatedButtons() { switch( m
我是一名优秀的程序员,十分优秀!