gpt4 book ai didi

java - JCheckBox 的 ItemListener 不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 07:24:56 24 4
gpt4 key购买 nike

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

我想要发生的是,如果有人选择复选框 t1,则其上方的文本(在 TextArea txtTop 中写入)将变为粗体。

但是,Eclipse 告诉我我的监听器存在多个问题。

  1. 它希望我将 t1 和 txtTop 声明为最终结果。
  2. 它希望我不要将监听器类设置为私有(private)。
  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!");
}

}
}



}


}

最佳答案

这对你有用:

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。

顺便说一句:

  • 携带
  • 仅限打野
  • <罢工>坦克
  • <罢工>支持

关于java - JCheckBox 的 ItemListener 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18685443/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com