1

Art and Science of Java (Java SE 6u45 を使用) を使用して Java を学習しています。JTextField に新しいフォント タイプを入力して、テキストのフォントを変更しようとしています。しかし問題は、JTextField にテキストを入力できないことです。この問題は、JButton、JCheckBox など、私が使用した他のスイング コンポーネントに共通しています。しかし、後者のコンポーネントでは、視覚的な選択が同じままであっても、選択の効果を見ることができました。

しかし、JTextField の場合、その効果すら現れていません。JTextField に入れたテスト テキストを削除することもできませんでした。isEditable()grabFocus()およびを使用しようとしisFocusable()ました。それはJavaのバグでしょうか?

/**
* Example 10.9
 * 
 * This program prints the given text in the font inputted by the user in JTextField
 */
package ASJ_Examples;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JLabel;
import javax.swing.JTextField;

import acm.graphics.GLabel;
import acm.program.GraphicsProgram;

public class FontSampler extends GraphicsProgram implements ActionListener{
/**
 * Eclispe Generated
 */
private static final long serialVersionUID = -5734136235409079420L;
private static final String TEST_STRING = "This is a test";
private static final double LEFT_MARGIN = 3;
private static final int MAX_FONT_NAME = 10;

public void init(){
    addJFontLabel();
    addJFontTextField();
    lastY = 0;
    addGLabel(); 
}
/**
 * Adds a text field to enter the required font
 */
private void addJFontTextField() {
    String test = "new";
    fontField = new JTextField(test, MAX_FONT_NAME);    //added to see if Jtextfiled is responding 
//      fontField.setEnabled(true);
//      fontField.setEditable(true);
    fontField.addActionListener(this);
    //added these to give focus to jtextfield but no effect
    fontField.isEditable();
    fontField.grabFocus();
    fontField.isFocusable();
    //add to window
    add(fontField, SOUTH);

}
/**
 * Adds JFontLAbel to denote the text input field
 */
private void addJFontLabel() {
    add(new JLabel("Font"), SOUTH);

}

/**
 * Adds the test label to canvas
 */
private void addGLabel() {
    lastLabel = new GLabel(TEST_STRING);
    add(lastLabel, 20, 20);

}

public void ActionPerformed(ActionEvent e){
    if(e.getSource() == fontField){
        GLabel label = new GLabel(TEST_STRING);
        label.setFont(lastLabel.getFont()); //to display the text even if the suer entered a non-allowed font
        label.setFont(fontField.getText()); //change the font to u4ser demanded font
        addGlabel(label);
        lastLabel = label;
    }
}
/**
 *adds a Glabel on the next line adjusting for heights
 * @param label
 */
private void addGlabel(GLabel label) {
    lastY += label.getHeight();
    lastY += lastLabel.getDescent() - label.getDescent();
    add(label, LEFT_MARGIN, lastY);

}
/**
 * JTextField to enter font
 */
private JTextField fontField;
/**
 * GLabel which is being worked on
 */
private GLabel lastLabel;
/**
 * 
 */
private double lastY;
}
4

3 に答える 3

0

fontField.requestFocus();代わりにfontField.grabFocus();fontField.setEditable(true);代わりにfontField.isEditable(); fontField.setFocusable(true);を使用してみてくださいfontField.isFocusable();

ところでfontField.setEditable(true);fontField.setFocusable(true);これらはデフォルトでは true に設定されている必要はありません。

于 2013-05-06T05:09:16.657 に答える