如果勾选了复选框,则启用“可滚动”框

时间:2015-12-27 00:10:15

标签: java jframe

我想要的是,当选择了两个复选框时,可滚动框可见

    JPanel panel = new JPanel();
    panel.setBounds(10, 10, 5, 3);//pos is temp
    contentPane.add(panel);

    JScrollPane scrollPane = new JScrollPane();
    panel.add(scrollPane);

并且在框中用户应该能够输入数字。

所以我为此做的是在滚动窗格中添加一个框并将可见性设置为false。

    JScrollPane scrollPane = new JScrollPane();
    textField = new JTextField();
    scrollPane.add(textField);
    textField.setColumns(6);
    panel.add(scrollPane);
    panel.setVisible(false);

但文本字段未显示。

还有一个听众

    ActionListener al = (ActionEvent e) -> {
        if (e.getSource() == chA || e.getSource() == chB) {
            chckbx1.setEnabled(true);
            //setting the panel to visible when box a or B and chckbx1 has been selected 
            if (e.getSource() == chckbx1) {
                panel.setVisible(true);

            }
        }
    };
    chA.addActionListener(al);
    chB.addActionListener(al);

但是atm这不起作用,任何人都可以帮助我,我将不胜感激。

以下是完整代码>>的链接http://pastebin.com/v689BB8A

2 个答案:

答案 0 :(得分:1)

所以,你的基本要求是

  

选择框a或B和chckbx1时

显示JScrollPane

所以,根据你的代码......

if (e.getSource() == chA || e.getSource() == chB) {
    chckbx1.setEnabled(true);
    //setting the panel to visible when box a or B and chckbx1 has been selected 
    if (e.getSource() == chckbx1) {
        panel.setVisible(true);
    }
}

实际上您无法显示panel,因为source的{​​{1}}无法成为ActionEventchA AND chB chckbx1同时,您应该只检查JCheckBox的{​​{1}}状态

例如......

selected

通常情况下,我鼓励使用JCheckBox,但这可能会有点过分,但为此过度杀人。

可运行的示例

if ((chA.isSelected() || chB.isSelected()) && chckbx1.isSelected()) {
    panel.setVisible(true);
    frame.revalidate();
    frame.repaint();
}

答案 1 :(得分:0)

使用此功能,查看您的错误。

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class Test {

    private JFrame frame;
    private JTextArea textArea;

    public static void main(String[] args) {
        EventQueue.invokeLater(() -> {
            try {
                Test window = new Test();
                window.frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        });
    }

    /**
     * Create the application.
     */
    public Test() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame();
        frame.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 5));
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JCheckBox chA = new JCheckBox("text");
        chA.setFont(new Font("Adobe Arabic", Font.PLAIN, 14));
        frame.getContentPane().add(chA);

        JCheckBox chB = new JCheckBox("text");
        chB.setFont(new Font("Adobe Arabic", Font.PLAIN, 14));
        frame.getContentPane().add(chB);

        JCheckBox chckbx1 = new JCheckBox("text");
        chckbx1.setFont(new Font("Adobe Arabic", Font.PLAIN, 14));
        chckbx1.setEnabled(false);
        frame.getContentPane().add(chckbx1);

        JPanel panel = new JPanel();
        frame.add(panel);

        JScrollPane scrollPane = new JScrollPane();
        scrollPane.setPreferredSize(new Dimension(200, 200));
        textArea = new JTextArea(5, 5);
        scrollPane.add(textArea);
        textArea.setColumns(6);
        panel.add(scrollPane);
        panel.setVisible(false);

        ActionListener al = new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                if (e.getSource() == chA || e.getSource() == chB) {
                    chckbx1.setEnabled(true);
                }

                if (e.getSource() == chckbx1) {
                    panel.setVisible(true);
                    frame.repaint();
                }
            }
        };
        chA.addActionListener(al);
        chB.addActionListener(al);
        chckbx1.addActionListener(al);
    }

}