У меня возникла проблема с моим самым новым проектом. Я новичок, так что имейте это в виде: DФлажки ItemListener не работают должным образом
Что я хочу, чтобы мой проект, чтобы сделать это изменить шрифт некоторого текст, если выбран флажок, и сделать его вернуться к нормальной жизни, если он не выбран.
Мне уже удалось реализовать это.
Однако есть несколько рядов флажков. Если выбрано 2, и я отмениваю выбор одного из них, текст снова изменится. Я не хочу, чтобы текст стал нормальным, пока флажок в столбце все еще выбран.
Как я могу это сделать? = (
Надеюсь, один из вас может мне помочь!
import java.awt.Color;
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);
final Font headfontRed = 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);
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);
// Checkbox 2nd row
addCheckBox(183, 200, 23, 23, txtTop);
addCheckBox(255, 200, 23, 23, txtMid);
addCheckBox(322, 200, 23, 23, txtJng);
addCheckBox(393, 200, 23, 23, txtAdc);
addCheckBox(457, 200, 23, 23, txtSup);
// Checkbox 3nd row
addCheckBox(183, 257, 23, 23, txtTop);
addCheckBox(255, 257, 23, 23, txtMid);
addCheckBox(322, 257, 23, 23, txtJng);
addCheckBox(393, 257, 23, 23, txtAdc);
addCheckBox(457, 257, 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 FontChanger(txtTop));
this.contentPane.add(checkBox);
}
class FontChanger implements ItemListener
{
private JTextArea textArea;
public FontChanger(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);
}
}
}
}
Спасибо за ваш ответ :) Я понимаю общую концепцию, но я не уверен, насколько хорошо я смогу реализовать ее самостоятельно. Не могли бы вы помочь мне, дав мне приблизительную отправную точку? – Gomox
Ваш класс WindowBuilderTest должен иметь переменную 'private FontChanger fChanger;'. В начале вашего конструктора вы затем создаете экземпляр переменной следующим образом: '..// Role Headlines final JTextArea txtTop = new JTextArea(); fChanger = new FontChanger (txtTop); .. ' Затем вы добавляете свои флажки с тем же методом addCheckBox(), но вместо этого ваш метод будет выглядеть так: ' private void addCheckBox [..] final JCheckBox checkBox = новый JCheckBox(); checkBox.setBounds (x, y, ширина, высота); checkBox.addItemListener (fChanger); .. ' Затем измените элемент itemStateChanged(). – schwarz
Если это еще не ясно, я могу обновить свой предыдущий ответ более подробно. – schwarz