Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JCheckBox的ItemListener不';行不通_Java_Swing_Inner Classes_Jcheckbox_Itemlistener - Fatal编程技术网

Java JCheckBox的ItemListener不';行不通

Java JCheckBox的ItemListener不';行不通,java,swing,inner-classes,jcheckbox,itemlistener,Java,Swing,Inner Classes,Jcheckbox,Itemlistener,我只是一个初学者,在将项侦听器作为内部类实现时遇到了问题 我希望发生的是,如果有人选中复选框t1,则其上方的文本(写在TextAreatxtop中)将变为粗体 然而,Eclipse告诉我,我的侦听器存在多个问题 它想让我宣布t1和TXTOP为最终版本 它希望我不要将listener类设置为私有 它无论如何都找不到侦听器。行t1.addItemListener(new cl())不起作用 所以是的,我不知道该怎么办。希望你们中的一位能帮我一把!:) 代码如下: import java.awt.Bo

我只是一个初学者,在将项侦听器作为内部类实现时遇到了问题

我希望发生的是,如果有人选中复选框
t1
,则其上方的文本(写在TextArea
txtop
中)将变为粗体

然而,Eclipse告诉我,我的侦听器存在多个问题

  • 它想让我宣布t1和TXTOP为最终版本
  • 它希望我不要将listener类设置为私有
  • 它无论如何都找不到侦听器。行
    t1.addItemListener(new cl())不起作用
  • 所以是的,我不知道该怎么办。希望你们中的一位能帮我一把!:)

    代码如下:

    import java.awt.BorderLayout;
    
    
    public class WindowBuilderTest extends JFrame 
    {
    
    private JPanel contentPane;
    
    
    //Launch the application.
    public static void main(String[] args) 
    {
        EventQueue.invokeLater(new Runnable() 
        {
            public void run() 
            {
                try 
                {
                    WindowBuilderTest frame = new WindowBuilderTest();
                    frame.setVisible(true);
                } catch (Exception e) 
                {
                    e.printStackTrace();
                }
            }
        });
    }
    
    
    // Creating Frame
    public WindowBuilderTest() 
    {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 1280, 720 );
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
    
    
        // Create Font
        Font headfont = new Font("Serif", Font.PLAIN, 15);
    
    
        // Role Headlines
        final JTextArea txtTop = new JTextArea();
        txtTop.setEditable(false);
        txtTop.setText("TOP");
        txtTop.setBounds(180, 95, 32, 23);
        txtTop.setFont(headfont);
        contentPane.add(txtTop);
    
        JTextArea txtMid = new JTextArea();
        txtMid.setEditable(false);
        txtMid.setText("MID");
        txtMid.setBounds(252, 95, 32, 23);
        contentPane.add(txtMid);
    
        JTextArea txtJng = new JTextArea();
        txtJng.setEditable(false);
        txtJng.setText("JNG");
        txtJng.setBounds(320, 95, 32, 23);
        contentPane.add(txtJng);
    
        JTextArea txtAdc = new JTextArea();
        txtAdc.setEditable(false);
        txtAdc.setText("ADC");
        txtAdc.setBounds(389, 95, 32, 23);
        contentPane.add(txtAdc);
    
        JTextArea txtSup = new JTextArea();
        txtSup.setEditable(false);
        txtSup.setText("SUP");
        txtSup.setBounds(453, 95, 32, 23);
        contentPane.add(txtSup);
    
        // Checkbox 1st row
        final JCheckBox t1 = new JCheckBox("");
        t1.setBounds(183, 143, 23, 23);
        t1.addItemListener(new cl());
        contentPane.add(t1);
    
        JCheckBox m1 = new JCheckBox("");
        m1.setBounds(255, 143, 23, 23);
        contentPane.add(m1);
    
        JCheckBox j1 = new JCheckBox("");
        j1.setBounds(322, 143, 23, 23);
        contentPane.add(j1);
    
        JCheckBox a1 = new JCheckBox("");
        a1.setBounds(393, 143, 23, 23);
        contentPane.add(a1);
    
        JCheckBox s1 = new JCheckBox("");
        s1.setBounds(457, 143, 23, 23);
        contentPane.add(s1);
    
    
         class cl implements ItemListener
        {
            @Override
            public void itemStateChanged(ItemEvent e) 
            {
                if(t1.isSelected())
                {
                    //Font headfont = txtTop.getFont().deriveFont(Font.BOLD, 40);
                    //txtTop.setFont(headfont);
                    System.out.println("HURRA!");
                }
                else
                {
                    //Font headfont = txtTop.getFont().deriveFont(Font.PLAIN, 40);
                    //txtTop.setFont(headfont);
                    System.out.println("JUHU!");
                }
    
            }
        }
    
    
    
    }
    
    
    }
    
    这适用于您:

    import java.awt.Color;
    import java.awt.EventQueue;
    import java.awt.Font;
    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;
    
    import javax.swing.JCheckBox;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTextArea;
    import javax.swing.border.EmptyBorder;
    
    public class WindowBuilderTest extends JFrame
    {
    
        private JPanel  contentPane;
    
    //Launch the application.
        public static void main(final String[] args)
        {
            EventQueue.invokeLater(new Runnable()
            {
                @Override
                public void run()
                {
                    try
                    {
                        final WindowBuilderTest frame = new WindowBuilderTest();
                        frame.setVisible(true);
                    }
                    catch (final Exception e)
                    {
                        e.printStackTrace();
                    }
                }
            });
        }
    
        // Creating Frame
        public WindowBuilderTest()
        {
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setBounds(100, 100, 1280, 720);
            this.contentPane = new JPanel();
            this.contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
            setContentPane(this.contentPane);
            this.contentPane.setLayout(null);
    
            // Create Font
            final Font headfont = new Font("Serif", Font.PLAIN, 15);
    
            // Role Headlines
            final JTextArea txtTop = new JTextArea();
            txtTop.setEditable(false);
            txtTop.setText("TOP");
            txtTop.setBounds(180, 95, 32, 23);
            txtTop.setFont(headfont);
            this.contentPane.add(txtTop);
    
            final JTextArea txtMid = new JTextArea();
            txtMid.setEditable(false);
            txtMid.setText("MID");
            txtMid.setBounds(252, 95, 32, 23);
            this.contentPane.add(txtMid);
    
            final JTextArea txtJng = new JTextArea();
            txtJng.setEditable(false);
            txtJng.setText("JNG");
            txtJng.setBounds(320, 95, 32, 23);
            this.contentPane.add(txtJng);
    
            final JTextArea txtAdc = new JTextArea();
            txtAdc.setEditable(false);
            txtAdc.setText("ADC");
            txtAdc.setBounds(389, 95, 32, 23);
            this.contentPane.add(txtAdc);
    
            final JTextArea txtSup = new JTextArea();
            txtSup.setEditable(false);
            txtSup.setText("SUP");
            txtSup.setBounds(453, 95, 32, 23);
            this.contentPane.add(txtSup);
    
            // Checkbox 1st row
            addCheckBox(183, 143, 23, 23, txtTop);
            addCheckBox(255, 143, 23, 23, txtMid);
            addCheckBox(322, 143, 23, 23, txtJng);
            addCheckBox(393, 143, 23, 23, txtAdc);
            addCheckBox(457, 143, 23, 23, txtSup);
        }
    
        private void addCheckBox(final int x, final int y, final int width, final int height, final JTextArea txtTop)
        {
            final JCheckBox checkBox = new JCheckBox();
            checkBox.setBounds(x, y, width, height);
            checkBox.addItemListener(new BoldChanger(txtTop));
            this.contentPane.add(checkBox);
        }
    
        class BoldChanger implements ItemListener
        {
            private JTextArea   textArea;
    
            public BoldChanger(final JTextArea textArea)
            {
                this.textArea = textArea;
            }
    
            @Override
            public void itemStateChanged(final ItemEvent e)
            {
                if (e.getStateChange() == ItemEvent.SELECTED)
                {
                    final Font boldFont = this.textArea.getFont().deriveFont(Font.BOLD);
                    this.textArea.setForeground(Color.RED);
                    this.textArea.setFont(boldFont);
                }
                else
                {
                    final Font boldFont = this.textArea.getFont().deriveFont(Font.PLAIN);
                    this.textArea.setForeground(Color.BLACK);
                    this.textArea.setFont(boldFont);
                }
            }
        }
    }
    
    您遇到了以下问题:

    • 方法内部不允许使用内部类定义(必须将其移出)
    • 最后一个想法是正确的,如果您使用任意类(您定义的类是
      ActionListener listner=new ActionListner{…}
    我将ItemListner重命名为
    BoldChanger
    。它在构造函数中获取要更改的文本区域

    顺便说一句:

    • 携带
    • 仅限荣格
    • 坦克
    • 支持
    这对您很有用:

    import java.awt.Color;
    import java.awt.EventQueue;
    import java.awt.Font;
    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;
    
    import javax.swing.JCheckBox;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTextArea;
    import javax.swing.border.EmptyBorder;
    
    public class WindowBuilderTest extends JFrame
    {
    
        private JPanel  contentPane;
    
    //Launch the application.
        public static void main(final String[] args)
        {
            EventQueue.invokeLater(new Runnable()
            {
                @Override
                public void run()
                {
                    try
                    {
                        final WindowBuilderTest frame = new WindowBuilderTest();
                        frame.setVisible(true);
                    }
                    catch (final Exception e)
                    {
                        e.printStackTrace();
                    }
                }
            });
        }
    
        // Creating Frame
        public WindowBuilderTest()
        {
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setBounds(100, 100, 1280, 720);
            this.contentPane = new JPanel();
            this.contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
            setContentPane(this.contentPane);
            this.contentPane.setLayout(null);
    
            // Create Font
            final Font headfont = new Font("Serif", Font.PLAIN, 15);
    
            // Role Headlines
            final JTextArea txtTop = new JTextArea();
            txtTop.setEditable(false);
            txtTop.setText("TOP");
            txtTop.setBounds(180, 95, 32, 23);
            txtTop.setFont(headfont);
            this.contentPane.add(txtTop);
    
            final JTextArea txtMid = new JTextArea();
            txtMid.setEditable(false);
            txtMid.setText("MID");
            txtMid.setBounds(252, 95, 32, 23);
            this.contentPane.add(txtMid);
    
            final JTextArea txtJng = new JTextArea();
            txtJng.setEditable(false);
            txtJng.setText("JNG");
            txtJng.setBounds(320, 95, 32, 23);
            this.contentPane.add(txtJng);
    
            final JTextArea txtAdc = new JTextArea();
            txtAdc.setEditable(false);
            txtAdc.setText("ADC");
            txtAdc.setBounds(389, 95, 32, 23);
            this.contentPane.add(txtAdc);
    
            final JTextArea txtSup = new JTextArea();
            txtSup.setEditable(false);
            txtSup.setText("SUP");
            txtSup.setBounds(453, 95, 32, 23);
            this.contentPane.add(txtSup);
    
            // Checkbox 1st row
            addCheckBox(183, 143, 23, 23, txtTop);
            addCheckBox(255, 143, 23, 23, txtMid);
            addCheckBox(322, 143, 23, 23, txtJng);
            addCheckBox(393, 143, 23, 23, txtAdc);
            addCheckBox(457, 143, 23, 23, txtSup);
        }
    
        private void addCheckBox(final int x, final int y, final int width, final int height, final JTextArea txtTop)
        {
            final JCheckBox checkBox = new JCheckBox();
            checkBox.setBounds(x, y, width, height);
            checkBox.addItemListener(new BoldChanger(txtTop));
            this.contentPane.add(checkBox);
        }
    
        class BoldChanger implements ItemListener
        {
            private JTextArea   textArea;
    
            public BoldChanger(final JTextArea textArea)
            {
                this.textArea = textArea;
            }
    
            @Override
            public void itemStateChanged(final ItemEvent e)
            {
                if (e.getStateChange() == ItemEvent.SELECTED)
                {
                    final Font boldFont = this.textArea.getFont().deriveFont(Font.BOLD);
                    this.textArea.setForeground(Color.RED);
                    this.textArea.setFont(boldFont);
                }
                else
                {
                    final Font boldFont = this.textArea.getFont().deriveFont(Font.PLAIN);
                    this.textArea.setForeground(Color.BLACK);
                    this.textArea.setFont(boldFont);
                }
            }
        }
    }
    
    您遇到了以下问题:

    • 方法内部不允许使用内部类定义(必须将其移出)
    • 最后一个想法是正确的,如果您使用任意类(您定义的类是
      ActionListener listner=new ActionListner{…}
    我将ItemListner重命名为
    BoldChanger
    。它在构造函数中获取要更改的文本区域

    顺便说一句:

    • 携带
    • 仅限荣格
    • 坦克
    • 支持

    太棒了!:)我会立即尝试。特别感谢您的解释!您也可以使用方法创建组件。我使用复选框为您创建了组件。您还应该看看GridLayout听起来很有趣-我会看看它:)顺便问一句:为什么是“最终的”每个文本区域前的声明是否需要?如果解决方案对您有效,您能否接受答案?(或者告诉我遗漏了什么:))还有一个问题:我怎样才能将颜色(改为红色)而不是加粗?我想我必须更改这一行:final Font boldFont=this.textArea.getFont().deriveFont(Font.BOLD);太棒了!:)我马上就去试试。特别感谢你的解释!也可以使用方法创建组件。我是用复选框帮你做的。你还应该看看GridLayout听起来很有趣-我会看一看:)顺便问一下:为什么每个TextArea之前都需要“final”语句?如果解决方案对你有效,你能接受答案吗?(或者告诉我遗漏了什么:))还有一个问题:我怎样才能将颜色(改为红色)而不是加粗?我想我必须更改这一行:final Font boldFont=this.textArea.getFont().deriveFont(Font.BOLD);