2

我想有一个JRadioPanel三个选项。前两个是硬编码选项,我希望第三个是“其他”按钮。我想有一个JTextField而不是文本作为该按钮的标题,但我不知道该怎么做。我尝试简单地将字段作为单选按钮的参数,但它不太喜欢。除了可能通过 NetBeans 之外,我还没有在网上找到任何东西来告诉我如何操作,这对我没有多大好处。有什么方法可以轻松做到这一点,还是我必须对布局做一些花哨的事情?

好吧,新问题。这些按钮看起来都正确,但由于某种原因,它们在一行而不是一列中。这是它的代码。不知道它为什么这样做。

    tf2 = new JTextField("Other", 20);
    newName.setActionCommand("newname");
    fulfillment.setActionCommand("fulfillment");
    fulfillment.setSelected(true);
    type.add(fulfillment);
    type.add(newName);
    fulfillment.addActionListener(this);
    newName.addActionListener(this);
    GridBagConstraints rC = new GridBagConstraints();
    JPanel radioPanel3 = new JPanel(new GridBagLayout());
    rC.gridwidth = 2;
    radioPanel3.add(fulfillment);
    rC.gridy = 1;
    radioPanel3.add(newName);
    rC.gridy = 2;
    rC.gridwidth = 1;
    radioPanel3.add(other);
    rC.gridx = 1;
    radioPanel3.add(tf2);
    c.gridx = 10;
    c.gridy = 4;
    pane.add(radioPanel3, c);
4

3 回答 3

4

放置没有文本的第三个单选按钮并添加JTextField. 例如GridBagLayout,在第一个和第二个单选按钮占据 2 列的地方使用,在第三行中,“空”单选按钮的 row=2 col=0 和JTextFieldrow=2 col=1

于 2011-11-30T17:15:17.597 回答
2

您可以创建一个可编辑的自定义组件,您可以添加方法 setLabelFor(),但为什么要重新发明轮子

  1. 删除 JRadioButtons/JCheckBoxes 的任何叙述

  2. 添加放在那里的JTextFields

    • 设置初始大小,例如 JTextField(10) 用于在 JTextField 和下一个 JRadioButtons/JCheckBoxes 之间创建初始间隙

    • 设置边框(空)

    • 设置背景(空)

    • 可编辑(假)

    • setOpaque(false) 用于半透明效果

  3. 然后所有的 JCmponents 都放到了 JPanel,没有理由改变 LayoutManager,因为默认情况下 JPanel 有 FlowLayout

在此处输入图像描述

从代码

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.LineBorder;

public class AddComponentsAtRuntime {

    private JFrame f;
    private JPanel panel;
    private JCheckBox checkValidate, checkReValidate, checkRepaint, checkPack;
    private JTextField checkValidateTex, checkReValidateTex, checkRepaintTex, checkPackTex;

    public AddComponentsAtRuntime() {
        JButton b = new JButton();
        b.setBackground(Color.red);
        b.setBorder(new LineBorder(Color.black, 2));
        b.setPreferredSize(new Dimension(600, 10));
        panel = new JPanel(new GridLayout(0, 1));
        panel.add(b);
        f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(panel, "Center");
        f.add(getCheckBoxPanel(), "South");
        f.setLocation(200, 200);
        f.pack();
        f.setVisible(true);
    }

    private JPanel getCheckBoxPanel() {
        checkValidateTex = new JTextField(10);
        checkValidateTex.setText("validate");
        //checkValidateTex.setBorder(null);
        //checkValidateTex.setBackground(null);
        //checkValidateTex.setOpaque(false);
        //checkValidateTex.setEditable(false);
        checkValidate = new JCheckBox();
        //checkValidate = new JCheckBox("validate");
        checkValidate.setSelected(false);
        checkReValidateTex = new JTextField("revalidate");
        checkReValidateTex.setBorder(null);
        checkReValidateTex.setBackground(null);
        checkReValidateTex.setOpaque(false);
        checkReValidateTex.setEditable(false);
        checkReValidate = new JCheckBox();
        //checkReValidate = new JCheckBox("revalidate");
        checkReValidate.setSelected(false);
        checkRepaintTex = new JTextField("repaint");
        checkRepaintTex.setBorder(null);
        checkRepaintTex.setBackground(null);
        checkRepaintTex.setOpaque(false);
        checkRepaintTex.setEditable(false);
        checkRepaint = new JCheckBox();
        //checkRepaint = new JCheckBox("repaint");
        checkRepaint.setSelected(false);
        checkPackTex = new JTextField("pack");
        checkPackTex.setBorder(null);
        checkPackTex.setBackground(null);
        checkPackTex.setOpaque(false);
        checkPackTex.setEditable(false);
        checkPack = new JCheckBox();
        //checkPack = new JCheckBox("pack");
        checkPack.setSelected(false);
        JButton addComp = new JButton("Add New One");
        addComp.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                JButton b = new JButton();
                b.setBackground(Color.red);
                b.setBorder(new LineBorder(Color.black, 2));
                b.setPreferredSize(new Dimension(600, 10));
                panel.add(b);
                makeChange();
                System.out.println(" Components Count after Adds :" + panel.getComponentCount());
            }
        });
        JButton removeComp = new JButton("Remove One");
        removeComp.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                int count = panel.getComponentCount();
                if (count > 0) {
                    panel.remove(0);
                }
                makeChange();
                System.out.println(" Components Count after Removes :" + panel.getComponentCount());
            }
        });
        JPanel panel2 = new JPanel();
        panel2.add(checkValidate);
        panel2.add(checkValidateTex);
        panel2.add(checkReValidate);
        panel2.add(checkReValidateTex);
        panel2.add(checkRepaint);
        panel2.add(checkRepaintTex);
        panel2.add(checkPack);
        panel2.add(checkPackTex);
        panel2.add(addComp);
        panel2.add(removeComp);
        return panel2;
    }

    private void makeChange() {
        if (checkValidate.isSelected()) {
            panel.validate();
        }
        if (checkReValidate.isSelected()) {
            panel.revalidate();
        }
        if (checkRepaint.isSelected()) {
            panel.repaint();
        }
        if (checkPack.isSelected()) {
            f.pack();
        }
    }

    public static void main(String[] args) {
        AddComponentsAtRuntime makingChanges = new AddComponentsAtRuntime();
    }
}
于 2011-11-30T18:15:22.380 回答
0

你必须对布局做一些更漂亮的事情。没有任何内置的东西可以在摇摆中完成......

不过实现起来应该没那么难!对于 GUI,使用 netbeans 是一个好主意。您应该考虑将 IDE 用于项目的 GUI 部分。它将为您生成代码,因此在最坏的情况下,您应该考虑在您最喜欢的 IDE 中以实际源代码或生成 jar 的形式使用生成的代码。我已经做了很多,因为我最喜欢的编辑器是 eclipse,我更喜欢有一个所见即所得的 gui 编辑器。

Eclipse 也有许多所见即所得的编辑器插件,您可以查看,但我从未这样做过。这是一个:http ://www.ibm.com/developerworks/opensource/library/os-ecvisual/

于 2011-11-30T17:46:52.893 回答