我想JFrame用 HTML創建一個JEditorPane。當用戶按下 時,需要發生某些事情ENTER。
但是,只要我保留,只要按下,JEditorPane就會播放“Windows 背景聲音” 。ENTER可以在 2:57 在此 YouTube 視頻中聽到聲音:
https ://www.youtube.com/watch?v=sRTvrtuuGJQ&t=176s
我想要,JEditorPane但我不想要聲音。如何去除聲音?
這是我的代碼:
public static void main(String[] args) {
// Create Frame with dimensions
Dimension frameDimension = new Dimension(600, 400);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setMinimumSize(frameDimension);
frame.setSize(frameDimension);
frame.setBackground(Color.white);
//Create HTML Editor Pane
JEditorPane htmlLabel = new JEditorPane("text/html", "");
htmlLabel.setEditable(false);
htmlLabel.setBackground(Color.WHITE);
htmlLabel.setFont(new Font(htmlLabel.getName(), Font.PLAIN, 14));
htmlLabel.setVisible(true);
//IF I KEEP THIS LINE,
//I will hear a "Windows Notification Sound"
//whenever I press ENTER
frame.add(htmlLabel);
//I don't want the sound but I want this pane
htmlLabel.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
//If Enter is pressed
if(e.getKeyCode() == 10) {
// DO STUFF
}
}
@Override
public void keyReleased(KeyEvent e) {
}
});
frame.setResizable(false);
frame.setVisible(true);
}
順便說一下,我的 Java 版本是 1.8 u221
我將不勝感激。
uj5u.com熱心網友回復:
TL;博士
您需要洗掉與按鍵相關的操作ENTER。
htmlLabel.getInputMap().put(KeyStroke.getKeyStroke("pressed ENTER"), "none");
解釋
JEditorPane將鍵盤按鍵組合的按下與動作相關聯。此代碼顯示所有已注冊的組合:
for (KeyStroke ks : htmlLabel.getInputMap().allKeys()) {
System.out.println(ks);
}
運行上述代碼時,其中一行輸出是:
pressed ENTER
可以像這樣獲得Action與 press 相關的 [default] :ENTER
htmlLabel.getActionMap().get(htmlLabel.getInputMap().get(KeyStroke.getKeyStroke("pressed ENTER")));
這將回傳 class 的一個實體javax.swing.text.StyledEditorKit.StyledInsertBreakAction。該類的actionPerformed方法包含以下代碼:
public void actionPerformed(ActionEvent e) {
JEditorPane target = getEditor(e);
if (target != null) {
if ((!target.isEditable()) || (!target.isEnabled())) {
UIManager.getLookAndFeel().provideErrorFeedback(target);
return;
}
換言之,如果JEditorPane不可編輯且按下該ENTER鍵,則會播放[Windows]嗶聲。
因此,如上所述,最簡單的解決方案(在我看來)是簡單地洗掉Action與 press 相關的ENTER。
當然,您也可以創建自己Action的替代默認設定。
請注意,您KeyListener仍然可以作業,即即使在洗掉 之后Action,按下ENTER仍然會呼叫方法keyPressed。
參考
- 如何使用編輯器窗格和文本窗格
- 如何使用鍵系結
兩者都來自于Oracle 的 Java 教程的使用 Swing 路徑創建 GUI中的使用 Swing 組件課程。
這是我對您問題中代碼的重寫:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.KeyStroke;
public class App {
public static void main(String[] args) {
Dimension frameDimension = new Dimension(600, 400);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setMinimumSize(frameDimension);
frame.setSize(frameDimension);
frame.setBackground(Color.white);
// Create HTML Editor Pane
JEditorPane htmlLabel = new JEditorPane("text/html", "");
htmlLabel.getInputMap().put(KeyStroke.getKeyStroke("pressed ENTER"), "none");
htmlLabel.setEditable(false);
htmlLabel.setBackground(Color.WHITE);
htmlLabel.setFont(new Font(htmlLabel.getName(), Font.PLAIN, 14));
htmlLabel.setVisible(true);
// IF I KEEP THIS LINE,
// I will hear a "Windows Notification Sound"
// whenever I press ENTER
frame.add(htmlLabel);
// I don't want the sound but I want this pane
htmlLabel.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
// If Enter is pressed
if (e.getKeyCode() == 10) {
// DO STUFF
System.out.println("ENTER");
}
}
@Override
public void keyReleased(KeyEvent e) {
}
});
frame.setResizable(false);
frame.setVisible(true);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/522900.html
標籤:爪哇视窗摇摆声音的乙二胺
