【发布时间】:2015-02-15 00:31:51
【问题描述】:
运行以下代码时,构造函数:
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);
}
}
}
【问题讨论】:
-
是什么让你相信
ItemHandler构造函数没有运行? -
它永远不会在调试模式下运行。
-
你真的在做一些导致
Window()构造函数被使用的事情吗? (new Window()在你的程序中的某处)如果Window()构造函数运行,那么ItemHandler(Font)构造函数将运行四次,除非之前抛出异常。如果您相信“它永远不会在调试模式下运行”,那么您可能没有告诉调试器正确跟踪这一点。
标签: java constructor scope