gpt4 book ai didi

java - 在 JTextField 内部删除不适用于新的 BasicLookAndFeel

转载 作者:行者123 更新时间:2023-11-30 06:12:54 27 4
gpt4 key购买 nike

如果您为应用程序应用新的(基本)LookAndFeel,我很惊讶地发现 JTextField 停止响应删除操作。

下面是完整的代码:

import javax.swing.*;
import javax.swing.plaf.ColorUIResource;
import javax.swing.plaf.basic.BasicLookAndFeel;
import java.awt.*;
import java.util.logging.Logger;

public class App2 {
private static final Logger log = Logger.getLogger(App2.class.getCanonicalName());

public static void main(String args[]){
setUI();

JFrame f = new JFrame();

JTextField tf = new JTextField();
f.add(tf);



f.setSize(300, 300);
f.setVisible(true);
f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
}

static void setUI(){
try {
javax.swing.UIManager.setLookAndFeel(new DummyLookAndFeel());
} catch ( UnsupportedLookAndFeelException ex) {
log.warning("Setting UI not ok : " + ex.getMessage());
}
}
}

class DummyLookAndFeel extends BasicLookAndFeel {
@Override
protected void initComponentDefaults(UIDefaults table) {
table.put("TextField.background", new ColorUIResource(Color.RED));
}

@Override
public String getName() {
return "Just a fancy name";
}

@Override
public String getID() {
return "Something unique";
}

@Override
public String getDescription() {
return "A very very long description";
}

@Override
public boolean isNativeLookAndFeel() {
return false;
}

@Override
public boolean isSupportedLookAndFeel() {
return true;
}
}

知道为什么会发生吗?

最佳答案

看来如果我将 initComponentDefaults(...) 更改为

protected void initComponentDefaults(UIDefaults table) {
super.initComponentDefaults(table);

Object fim = table.get("TextField.focusInputMap");

Object fieldInputMap = new UIDefaults.LazyInputMap(new Object[] {
"ctrl C", DefaultEditorKit.copyAction,
"ctrl V", DefaultEditorKit.pasteAction,
"ctrl X", DefaultEditorKit.cutAction,
"COPY", DefaultEditorKit.copyAction,
"PASTE", DefaultEditorKit.pasteAction,
"CUT", DefaultEditorKit.cutAction,
"control INSERT", DefaultEditorKit.copyAction,
"shift INSERT", DefaultEditorKit.pasteAction,
"shift DELETE", DefaultEditorKit.cutAction,
"shift LEFT", DefaultEditorKit.selectionBackwardAction,
"shift KP_LEFT", DefaultEditorKit.selectionBackwardAction,
"shift RIGHT", DefaultEditorKit.selectionForwardAction,
"shift KP_RIGHT", DefaultEditorKit.selectionForwardAction,
"ctrl LEFT", DefaultEditorKit.previousWordAction,
"ctrl KP_LEFT", DefaultEditorKit.previousWordAction,
"ctrl RIGHT", DefaultEditorKit.nextWordAction,
"ctrl KP_RIGHT", DefaultEditorKit.nextWordAction,
"ctrl shift LEFT", DefaultEditorKit.selectionPreviousWordAction,
"ctrl shift KP_LEFT", DefaultEditorKit.selectionPreviousWordAction,
"ctrl shift RIGHT", DefaultEditorKit.selectionNextWordAction,
"ctrl shift KP_RIGHT", DefaultEditorKit.selectionNextWordAction,
"ctrl A", DefaultEditorKit.selectAllAction,
"HOME", DefaultEditorKit.beginLineAction,
"END", DefaultEditorKit.endLineAction,
"shift HOME", DefaultEditorKit.selectionBeginLineAction,
"shift END", DefaultEditorKit.selectionEndLineAction,
"BACK_SPACE", DefaultEditorKit.deletePrevCharAction,
"shift BACK_SPACE", DefaultEditorKit.deletePrevCharAction,
"ctrl H", DefaultEditorKit.deletePrevCharAction,
"DELETE", DefaultEditorKit.deleteNextCharAction,
"ctrl DELETE", DefaultEditorKit.deleteNextWordAction,
"ctrl BACK_SPACE", DefaultEditorKit.deletePrevWordAction,
"RIGHT", DefaultEditorKit.forwardAction,
"LEFT", DefaultEditorKit.backwardAction,
"KP_RIGHT", DefaultEditorKit.forwardAction,
"KP_LEFT", DefaultEditorKit.backwardAction,
"ENTER", JTextField.notifyAction,
"ctrl BACK_SLASH", "unselect"/*DefaultEditorKit.unselectAction*/,
"control shift O", "toggle-componentOrientation"/*DefaultEditorKit.toggleComponentOrientation*/
});

table.put("TextField.focusInputMap", fieldInputMap);


table.put("TextField.background", new ColorUIResource(Color.RED));
}

JTextField 似乎正在工作。似乎 UIDefaults 没有“TextField.focusInputMap”条目(在示例中 fim 对象为空)

关于java - 在 JTextField 内部删除不适用于新的 BasicLookAndFeel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49840787/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com