运行以下代码时,构造函数:
public ItemHandler(Font f)
似乎没有运行,或者至少在以下情况下没有运行:
private Font font = null;
在外层。如果将其放在“ ItemHandler”类中,它将起作用,但是我的主要问题是,为什么不能将其放在其外部的类上?
public class Window extends JFrame {
private Font font = null;
private Font plainFont;
private Font boldFont;
private Font italicFont;
private Font boldItalicFont;
private JTextField textField;
private JRadioButton plainBtn;
private JRadioButton boldBtn;
private JRadioButton italicBtn;
private JRadioButton boldItalicBtn;
private ButtonGroup group;
public Window() {
super("Item Test Program");
setLayout(new FlowLayout());
plainFont = new Font("Serif", Font.PLAIN, 14);
boldFont = new Font("Serif", Font.BOLD, 14);
italicFont = new Font("Serif", Font.ITALIC, 14);
boldItalicFont = new Font("Serif", Font.BOLD + Font.ITALIC, 14);
textField = new JTextField("Please enter something here.", 16);
plainBtn = new JRadioButton("Plain", true);
boldBtn = new JRadioButton("Bold", false);
italicBtn = new JRadioButton("Italic", false);
boldItalicBtn = new JRadioButton("Bold and Italic", false);
group = new ButtonGroup();
ItemHandler plainItemHandler = new ItemHandler(plainFont);
ItemHandler boldItemHandler = new ItemHandler(boldFont);
ItemHandler italicItemHandler = new ItemHandler(italicFont);
ItemHandler boldItalicItemHandler = new ItemHandler(boldItalicFont);
plainBtn.addItemListener(plainItemHandler);
boldBtn.addItemListener(boldItemHandler);
italicBtn.addItemListener(italicItemHandler);
boldItalicBtn.addItemListener(boldItalicItemHandler);
textField.setFont(new Font("Serif", Font.PLAIN, 14));
group.add(plainBtn);
group.add(boldBtn);
group.add(italicBtn);
group.add(boldItalicBtn);
add(textField);
add(plainBtn);
add(boldBtn);
add(italicBtn);
add(boldItalicBtn);
}
private class ItemHandler implements ItemListener {
public ItemHandler(Font f) {
font = f;
}
public void itemStateChanged(ItemEvent event) {
textField.setFont(font);
}
}
}
最佳答案
我不明白您要问的是什么。但是,请注意,您的构造函数
public ItemHandler(Font f) {
font = f;
}
正在修改属于
Window
而不是ItemHandler
的变量。因此,当同一Window
实例创建四个ItemHandler
实例时,这些ItemHandler
构造函数中的每一个将修改同一font
实例中的Window
变量。这意味着当Window
代码执行此操作时: ItemHandler plainItemHandler = new ItemHandler(plainFont);
ItemHandler boldItemHandler = new ItemHandler(boldFont);
ItemHandler italicItemHandler = new ItemHandler(italicFont);
ItemHandler boldItalicItemHandler = new ItemHandler(boldItalicFont);
它们都将覆盖相同的
font
变量,这意味着仅最后一个计数。如果您期望有所不同,即四个不同的font
变量都设置为相应的参数,那将不会发生。关于java - 在Java中,为什么在外部类中没有调用我的构造函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28521845/