Я просто новичок, и у меня возникла проблема с реализацией прослушивателя элементов как внутреннего класса.ItemListener для JCheckBox не работает
Что я хочу, так это то, что если кто-то выберет флажок t1
, текст над ним, написанный в TextArea txtTop
, станет полужирным.
Однако Eclipse говорит мне, что с моим слушателем существует множество проблем.
- Он хочет, чтобы я объявлял t1 и txtTop окончательным.
- Он хочет, чтобы я не делал класс слушателя закрытым.
- В любом случае, он не находит слушателя. Строка
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!");
}
}
}
}
}
Awesome! :) Я попробую это немедленно. Спасибо за объяснения особенно! – Gomox
Вы также можете использовать методы для создания своих компонентов. Я сделал это с помощью флажков для вас. Вы также должны взглянуть на GridLayout – d0x
Звучит интересно - я посмотрю на него :) BTW: Почему «окончательное» утверждение перед каждым требованием TextArea? – Gomox