1

私は初心者で、アイテム リスナーを内部クラスとして実装する際に問題があります。

私が望んでいるのは、誰かがチェックボックスを選択するとt1、その上のテキストが TextArea に書かれてtxtTop太字になることです。

しかし、Eclipse は、リスナーに複数の問題があることを教えてくれます。

  1. t1 と txtTop を final として宣言する必要があります。
  2. リスナークラスをプライベートにしないでほしいです。
  3. とにかくリスナーが見つかりません。回線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!");
            }

        }
    }



}


}
4

1 に答える 1

1

これはあなたのために働きます:

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。コンストラクターで変更する TextArea を取得します。

ところで:

  • 運ぶ
  • ジャングラーのみ
  • タンク
  • サポート
于 2013-09-08T15:43:03.813 に答える