以编程方式从组件创建和选择值 - Swing

时间:2014-06-22 19:54:32

标签: java swing

我有这个方法在点击时向JPanel添加了一些指令,一个按钮和JLabel但是我需要一些方法来选择这三个元素以便我可以设置它们的样式,我正在使用迭代所有组件的解决方案找到我想要的样式,但它不会让我设置JPanels的边框,当你查看可用的方法时,它不是一个选项。无论如何在底部的循环中设置JLabel的边界?或者一种单独选择每个元素的方法。

当用户单击其他JPanel上的按钮时,将运行GenerateImageArea方法。

public void GenerateImageArea(int id)
{
    areaHeight += 200; // Extends JPanel

    i++;

    gbc.gridx = 0;
    gbc.gridy = i;
    gbc.gridwidth = 4;
    gbc.anchor = GridBagConstraints.LINE_START;
    // Add the instructions JLabel
    add(new JLabel("["+ (id+5) + "]: Select an image of maximum dimensions 720 * 350 pixels."), gbc);

    i++;
    gbc.gridx = 0;
    gbc.gridy = i;
    gbc.gridwidth = 1;
    gbc.anchor = GridBagConstraints.LINE_START;
    // Add a button to load an image
    add(new JButton("Load Image"));

    gbc.gridx = 1;
    gbc.gridwidth = 3;
    // Add the JLabel which acts as a space to display the image
    add(new JLabel(""));

    // Set colour + font of the instructions JLabel
    for (int i = 0; i < this.getComponentCount(); i++) {
        Component comp = this.getComponent(i);
        if (comp.toString().contains("]:")) {
            comp.setForeground(Settings.SITE_GREEN);
            comp.setFont(Settings.SUBTITLEFONT);
        }
        else if (comp.toString().contains("")) {
            // I need to change the border of the second JLabel
        }
    }
}

与此类似,我需要以编程方式添加JTextAreas然后样式,并在用户单击提交后从中检索数据。我如何以编程方式添加组件,但之后能够提取输入?

1 个答案:

答案 0 :(得分:1)

您可以直接设置样式,而不是找到要设置样式的元素。例如,而不是这样做:

add(new JLabel("["+ (id+5) + "]: Select an image of maximum dimensions 720 * 350 pixels."), gbc);

你可以这样做:

// Create instruction label
JLabel instruction = new JLabel("["+ (id+5) + "]: Select an image of maximum dimensions 720 * 350 pixels."); 
// Style it
instruction.setForeground(Settings.SITE_GREEN);
instruction.setFont(Settings.SUBTITLEFONT);
// Add it.
add(instruction, gbc);

我相信这种方法更容易,而且更不容易出错。