- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我需要帮助创建 Java swing 表单。该表单是动态创建的,并要求用户提供各种输入。输入各不相同,可以是文本字段、单选按钮、组合框。我正在尝试确定这种表单的最佳布局。目前,我有类似的东西:
JPanel pnlForm = new JPanel(new SpringLayout());
for (Parameter p : globals) {
JLabel lblName = new JLabel(p.getName() + ": ", JLabel.TRAILING);
pnlForm.add(lblName);
// The input field depends on parameter type
if (p.getType().equals("filename")) {
JPanel pnlFileChooser = new JPanel();
JTextArea txtArea = new JTextArea(p.getValue());
JButton btnFileChooser = new JButton("Browse");
pnlFileChooser.add(txtArea);
pnlFileChooser.add(btnFileChooser);
pnlForm.add(pnlFileChooser);
} else if (p.getType().equals("textbox")) {
JTextArea txtArea = new JTextArea(p.getValue());
pnlForm.add(txtArea);
} else if (p.getType().equals("checkbox")) {
// not yet implemented
} else if (p.getType().equals("radio")) {
ButtonGroup bgRadios = new ButtonGroup();
for(String option : p.getSelections()){
JRadioButton btnOption = new JRadioButton(option);
btnOption.setMnemonic(KeyEvent.VK_B);
btnOption.setActionCommand(option);
bgRadios.add(btnOption);
pnlForm.add(btnOption);
}
} else {
JLabel lblError = new JLabel("ERROR! Unknown type!" + p.getType());
lblName.setLabelFor(lblError);
pnlForm.add(lblError);
}
//Lay out the panel.
SpringUtilities.makeCompactGrid(pnlDetails,
globals.size() - 1, 2, //rows, cols
1, 1, //initX, initY
5, 5); //xPad, yPad
目前的情况非常不稳定(单选按钮不会停留在同一区域)。关于如何使这个布局更好有什么想法吗?
谢谢!
[编辑]
添加下图以了解其外观。灰线可以忽略,只是用来显示 JPanel 可能所在的位置。每行都是根据某些用户输入动态生成的。我怎样才能制作一个像这样的表格?
最佳答案
我最终使用 SpringLayout 来完成这项工作,每行有两个面板。左侧面板包含标签,右侧面板包含输入字段。这似乎运作良好:
for (Parameter p : params) {
// The label for this parameter
JLabel pname = new JLabel(p.getName() + ": ", JLabel.TRAILING);
// Setup the sub panels for this layout, aligned to point each other
JPanel pnlLeft = new JPanel(new FlowLayout(FlowLayout.RIGHT));
JPanel pnlRight = new JPanel(new FlowLayout(FlowLayout.LEFT));
// The value field for this parameter, depends on param type
if (p.getType().equals("filename")) {
JButton btnBrowse = new JButton("Browse");
btnBrowse.setActionCommand(pfilepath + p.getId());
btnBrowse.addActionListener(this);
JTextField pvalue = new JTextField(p.getValue(),50);
pnlRight.add(pvalue);
pnlRight.add(btnBrowse);
} else if (p.getType().equals("directory")) {
JButton btnBrowse = new JButton("Browse");
btnBrowse.setActionCommand(pdirpath + p.getId());
btnBrowse.addActionListener(this);
JTextField pvalue = new JTextField(p.getValue(),50);
pnlRight.add(pvalue);
pnlRight.add(btnBrowse);
} else if (p.getType().equals("textbox")) {
JTextField pvalue = new JTextField(p.getValue(),50);
pnlRight.add(pvalue);
} else if (p.getType().equals("checkbox")) {
for(String option : p.getSelections()){
JCheckBox chkbox = new JCheckBox(option);
if (p.getValue().contains(option)){
chkbox.setSelected(true);
}
chkbox.setName(p.getId() + "_" + option);
chkbox.setActionCommand(pchkbox + p.getId() + "_" + option);
chkbox.addActionListener(this);
pnlRight.add(chkbox);
}
} else if (p.getType().equals("radio")) {
ButtonGroup bgRadios = new ButtonGroup();
for(String option : p.getSelections()){
JRadioButton radio = new JRadioButton(option);
if (p.getValue().equals(option)){
radio.setSelected(true);
}
radio.setName(p.getId() + "_" + option);
radio.setActionCommand(pradio + p.getId() + "_" + option);
radio.addActionListener(this);
bgRadios.add(radio);
pnlRight.add(radio);
}
} else {
JTextField pvalue = new JTextField(p.getValue(),50);
pvalue.setText("ERROR! Invalid global parameter type!" + p.getType());
pvalue.setEditable(false);
pnlRight.add(pvalue);
}
// Add subpanels to this main panel and set labeling
pnlLeft.add(pname);
pname.setLabelFor(pnlRight);
add(pnlLeft);
add(pnlRight);
}
// Correctly setup SpringLayout grid for this main panel
SpringUtilities.makeCompactGrid(this,
params.size(), 2, //rows, cols
1, 1, //initX, initY
1, 1); //xPad, yPad
关于Java Swing 复杂表单 - SpringLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18244407/
我想问SpringLayout是否可以做绝对位置之类的事情,因为我认为当我最大化框架时绝对位置有问题,如果我需要设置,我必须使用什么JMenu 和 JToolBar 以及 JTextField 和 J
我在表单上使用了 SpringLayout,但是如您所见,它的外观并不好(大而且尺寸不佳)! public class t8 extends JFrame { JButton okButton, ca
我在做This例子。我的代码完全相同,但不是得到 我正在获取 谁能解释一下为什么吗? 最佳答案 很可能您正在运行一个不同的项目。运行按钮旁边有一个下拉箭头,单击它并选择要运行的正确项目。 关于java
SpringLayout 号称功能非常强大。我尝试使用 SpringLayout 实现我认为相当简单的布局,但失败得很严重。 减少到最少,我想在我的 JFrame 上并排放置 4 个 JButton:
我正在尝试使用 SpringLayout 实现一个非常简单的 UI(部分原因是,与我在网上找到的大多数教程作者相反,与其他布局管理器相比,我的编码界面非常相似,并且部分原因是我想学习如何使用它)。用户
我正在尝试使用 Swing 在 Java 中创建一个表单,但我在管理布局方面遇到了困难。 我想在对话框的中央有几个带标签的文本字段,并在右下角有“保存”和“关闭”按钮。 将按钮添加到对话框的右下方很简
我需要帮助创建 Java swing 表单。该表单是动态创建的,并要求用户提供各种输入。输入各不相同,可以是文本字段、单选按钮、组合框。我正在尝试确定这种表单的最佳布局。目前,我有类似的东西: JPa
我最近开始使用 Java 进行开发,并且非常享受这段经历。默认的 Java 包加载了有用的东西,并且拥有 Swing 包对创建 GUI 有很大帮助。我决定为我的 LayoutManager 使用 Sp
我的 GridLayout 遇到问题,JTextField 会变宽以适应比初始大小长的条目。另一位遇到此问题的发帖者被告知 SpringLayout 是最简单的解决方案,所以这就是我正在尝试的。然而,
我想将复杂的容器结构作为 SpringLayouts 的组合来管理(一系列独立的 SpringLayout 相互嵌套) 特别是,由包含 JPanel 的主 SpringLayout 管理的 JFram
使用SpringLayout时有没有简单的方法来定义节点的放置速度?我正在使用 JUng 库版本 2.1.1。 我什至创建了一个自己的 SpringLayout 类,以便可以更改任何参数,但更改“Sp
我不知道如何使带有 SpringLayout 的 JPanel 正确计算其首选大小,因为目前它始终是 (0, 0)。我尝试调用 panel.setPreferredSize(layout.prefer
我目前正在制作一个小型应用程序,我需要 Spring Utilities 类,该类扩展“JPanel”,因为它是一个内容 Pane ,但是我需要通过容器获取布局类型,但只有该类/框架使用 spring
我正在使用以下代码使用 SpringLayout 制作 GUI: private void createAndShowGUI() { frame = new JFrame("A GUI");
我有一个 JScrollPane,它有一个使用 SpringLayout 的 View 组件。 final JPanel panel = new JPanel(new SpringLayout());
SpringLayout 的文档说它从 java 1.4 开始就可用,我有大约 7 台旧的 mac,无法升级到任何较新版本的 mac os 10.5,这导致我最多只有 java 1.5.0_30。问题
我有一个卡片布局,可以使用 JComboBox 在面板之间切换。问题是当我重新调整窗口大小时,我里面的面板永远不会改变大小。当我使用 SpringLayout 时,我只需告诉某些东西与边框保持 x 像
TL;DR在不同的 DPI 设置上,我的应用程序的组件可能会重叠。为了摆脱这个问题,我想检查组件宽度,更新 UI 后它始终等于 0。问题末尾的简单代码。 基本问题是,在不同的 DPI 设置下,我的程序
我有一个 JPanel,其中包含另一个 JPanel,我想使用 SpringLayout 在其上放置一个 JButton。但由于某种原因,JButton 未绘制。但是,如果我使用绝对定位而不是布局管理
Oracle Java Swing 文档 layout managers似乎暗示在选择布局管理器时SpringLayout是一个选项。 (“SpringLayout 是一个灵活的布局管理器,专为 GU
我是一名优秀的程序员,十分优秀!