Swing 文本组件没有带有剪切/复制/粘贴等功能的上下文菜单。我想添加一个,以便它表现得更流畅,就像一个本机应用程序。我为此编写了一个菜单,效果很好。我使用以下方法将其添加到每个文本框:
someTextBox.setComponentPopupMenu(TextContextMenu.INSTANCE);
Run Code Online (Sandbox Code Playgroud)
问题是,到处添加这个很烦人。其次,如果我忘记在某个地方的文本框,应用程序就会不一致。第三,我无法将其添加到我无法控制创建代码的文本框中,例如来自JOptionPane.showInputDialog或JFileChooser对话框的文本框。
有没有办法覆盖JTextComponent应用程序范围的默认上下文菜单?我知道这将是一种令人毛骨悚然的远距离行动,但我对此表示同意。也欢迎对菜单本身发表评论。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.JTextComponent;
public class TextContextMenu extends JPopupMenu implements ActionListener {
public static final TextContextMenu INSTANCE = new TextContextMenu();
private final JMenuItem itemCut;
private final JMenuItem itemCopy;
private final JMenuItem itemPaste;
private final JMenuItem itemDelete;
private final JMenuItem itemSelectAll;
private TextContextMenu() {
itemCut = newItem("Cut", 'T');
itemCopy = newItem("Copy", 'C');
itemPaste = newItem("Paste", 'P');
itemDelete = newItem("Delete", 'D');
addSeparator();
itemSelectAll = newItem("Select …Run Code Online (Sandbox Code Playgroud) 我已经在 中设置了一些文本JTextArea。光标位于第 5 行。现在我想在第一行设置一些文本。
那么是否可以将光标重新定位到所需的行呢?
我需要能够在JLabel中选择文本.我已经在网上阅读了一些关于使用JTextfield来模拟JLabel的指南,但这对我来说没用,因为我的JLabel将跨越多行.那么关于如何做到这一点或任何可能的想法?
我使用html在JLabel中创建跨越多行的文本.但是,如果我输入一个没有空格的长字符串,它就不会转到新行,而是使底层的JScrollpane显示一个水平滚动条,并将JLabel右侧的组件推出视图区域.所以任何人都知道在JLabel中是否可以在没有空格的情况下自动换行字符串?
我在每个标签中添加了一个带有JPanel的JTabbedPane.和每个JPanel中的JText区域.选项卡可以在同一模板中动态创建.
酒店还设有带菜单的菜单栏.它有替换字符串出现的选项(例如将"<"替换为"<")当我刚使用JPanel和textArea时,它完美地工作.
现在我已经添加了tabbedPane,...我不知道如何单独替换活动选项卡的内容,...
我试过获取所选组件(getSelectedComponent()方法和getComponentAt()方法)并替换文本,..我没有工作
有人能帮我吗
我必须将textarea的内容写入包含换行符的文件中.我得到了输出,它被写成文件中的一个字符串.
public void actionPerformed(ActionEvent ev) {
text.setVisible(true);
String str= text.getText();
System.out.println(str);
try {
BufferedWriter fileOut = new BufferedWriter(new FileWriter("filename.txt"));
fileOut.write(str);
fileOut.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
例
输出应该是:
I
am
King.
Run Code Online (Sandbox Code Playgroud)
但它显示:
IamKing.
Run Code Online (Sandbox Code Playgroud)
请给我一些建议
我有一个文件监听器,工作得很好.但是,我想为它添加一些功能,以便当用户点击Enter键时,焦点转移到另一个对象.我无法弄清楚如何陷阱.这是我的代码:
txtNum1.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
setAnswer(e);
}
@Override
public void removeUpdate(DocumentEvent e) {
setAnswer(e);
}
@Override
public void changedUpdate(DocumentEvent e) {
setAnswer(e);
}
private void setAnswer(DocumentEvent e) {
if (txtNum1.getText().equals("")) {
num1 = 0;
} else {
num1 = Integer.parseInt(txtNum1.getText());
}
calcAnswer();
System.out.println(e); //trying to output the event 'Enter'
}
Run Code Online (Sandbox Code Playgroud)
我可以通过一个关键的监听器来做到这一点,但是在使用这种方法之前我已经在这个网站上被责骂了,所以我试图以正确的方式学习这个.
谢谢!
编辑:根据下面的建议,我添加了以下代码,但似乎没有任何效果.谁能看到我失踪的东西?谢谢!
/* If the user hits the Enter key, we want the focus to shift to
* the next text field */
txtNum1.addActionListener(new …Run Code Online (Sandbox Code Playgroud) 我想创建一个看起来像JTextArea的JTextArea,像JTextArea一样,像JTextArea一样响应,像JTextArea一样说话,像JTextArea一样移动,但不是JTextArea.
为了缩短它,我想在JTextArea上创建一个100%的自定义swing组件.一旦我这样做,我将能够更改JTextArea的其他硬编码属性并创建我自己的自定义JTextArea.没有按照我需要的方式设计预定义的swing组件,但JTextArea是最接近的,这就是我选择它的原因.
我想改变JTextArea行的间距.不,我不想使用JtextPane,我已经尝试过,它不适用于我的程序,它不同地计算它的位置,它看起来不同,并且应用JtextArea边框只是进一步混乱.
我不是试图扩展JTextArea,我正在尝试创建一个自定义的JTextArea,就像在自定义swing组件中一样,改变了硬编码的属性,这些属性是不可配置的JTextAreas方法.
但是,我不知道该怎么做.我一直在互联网上查找它,但是只有一个关于从stracth构建自己的组件的广泛指南...
弄清楚这将花费大量时间,并不会真正解决我的问题.
我唯一需要做的就是创建一个包含构建JTextArea的每个类的类(或几个类).从JTextComponent级别开始,复制用于创建JTextArea的所有较低级别的类.我还要注意我使用Nibus的外观和感觉,我认为可能需要包含一些类,以便自定义JTextArea在该LAF下正常运行.
我查看了swing源代码,它充满了各种各样的东西.确定在创建JTextArea时使用哪些类或它们的部分将是一个耗时的噩梦,因为我不知道核心的摆动结构和机制.
这就是为什么我要求有知识的人至少列出我需要复制JTextArea的类,然后我会弄清楚如何编写它们.
因为,如果我现在开始学习摇摆核心机制,我需要花费数天和数周的时间来解决这一问题,但对于知道的人来说,只需几分钟就可以列出我需要关注的所有课程.关注.
我想在这里采取捷径.我不想完全理解挥杆,我只是希望这件事能够发挥作用.默认间距是一个像素太低,我想做的就是让它像素更高.我不想知道画家如何在屏幕上绘制组件,我只想知道它在哪里被调用以及它自称为什么......
感谢任何花时间的人.
java ×8
swing ×8
jtextarea ×3
contextmenu ×1
filewriter ×1
jtabbedpane ×1
nimbus ×1
word-wrap ×1