- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建一个具有 JMenuItems(例如复制和粘贴)的低级 GUI。我需要创建一个 selectText() 方法,用于复制已合并到 JScrollPane 中的 JTextArea 中的选定文本。我正在尝试找出我应该使用的代码。我尝试过使用 getSelectedText() 但总是返回“null”。我有一些操作仍然没有任何功能,或者显示一个消息对话框,显示“有效”,以知道我已经添加了 ActionEvent,但没有任何实际功能。最终,我尝试将功能添加到 JMenuItem“复制”中,以便我可以使用 JMenuItem“列表文件”打开文件(这只打开基本文件,例如 .txt),然后复制 JTextArea 中显示的内容使用鼠标选择所需的文本,然后转到“工具”>“编辑”>“复制”,并使用 JMenuItem“复制”中集成的功能选择文本并使用名为 selectText() 的方法将其存储在字符串变量中。还要忽略 BasicFile 类中的一些方法,因为我从必须制作的另一个程序中重新使用了它。
这是我的代码:
MyJFrame.java
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package MyJFrame;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GraphicsConfiguration;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.io.FileNotFoundException;
import javax.swing.AbstractAction;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.text.JTextComponent;
/**
*
* @author Alejandro
*/
public class MyJFrame extends JFrame{
public MyJFrame(String title) throws HeadlessException {
super(title);
super.getContentPane().setBackground(Color.lightGray);
super.setPreferredSize(new Dimension(800, 600));
super.setLocation(500,300);
super.pack();
//CREATING MENU BAR
JMenuBar menuBar = new JMenuBar();
for(int i = 0; i < Constants.menus.length; i++)
{
JMenu newMenu = new JMenu(Constants.menus[i]);
//CREATING MENU FOR FILE
if(Constants.menus[i].equals("File"))
{
for(int fileItemCounter = 0; fileItemCounter < Constants.fileMenuChoices.length; fileItemCounter++)
{
//ADDING SEPARATOR WHEN NEEDED
if(Constants.fileMenuChoices[fileItemCounter].equals("*"))
{
newMenu.addSeparator();
}
else if(Constants.fileMenuChoices[fileItemCounter].equals("New"))
{
JMenuItem newMenuItem = new JMenuItem(new AbstractAction("New")
{
public void actionPerformed(ActionEvent e)
{
// Button pressed logic goes here
MyJFrame childFrame = new MyJFrame("New File");
childFrame.setLocation(600, 400);
}
});
newMenu.add(newMenuItem);
}
else if(Constants.fileMenuChoices[fileItemCounter].equals("List Files"))
{
JMenuItem newMenuItem = new JMenuItem(new AbstractAction("List Files")
{
public void actionPerformed(ActionEvent e)
{
// Button pressed logic goes here
try
{
BasicFile f = new BasicFile();
DisplayText textToBeDisplayed = new DisplayText(f.getName(), f.getContents());
JTextArea text = new JTextArea(textToBeDisplayed.getFileContents(),50, 50);
JScrollPane pane = new JScrollPane(text);
MyJFrame fileOpened = new MyJFrame(textToBeDisplayed.getFileName());
fileOpened.add(pane);
fileOpened.setLocation(600, 400);
}
catch(FileNotFoundException x)
{
}
}
});
newMenu.add(newMenuItem);
}
else
{
JMenuItem newMenuItem = new JMenuItem(Constants.fileMenuChoices[fileItemCounter]);
newMenu.add(newMenuItem);
}
}
}
//CREATING MENU FOR TOOLS
if(Constants.menus[i].equals("Tools"))
{
for(int toolsItemCounter = 0; toolsItemCounter < Constants.toolsMenuChoices.length; toolsItemCounter++)
{
//CREATING SUBMENU FOR MENU ITEM "EDIT"
if(Constants.toolsMenuChoices[toolsItemCounter].equals("Edit"))
{
JMenu newSubMenu = new JMenu(Constants.toolsMenuChoices[toolsItemCounter]);
for(int editMenuChoicesCounter = 0; editMenuChoicesCounter < Constants.editMenuChoices.length; editMenuChoicesCounter++)
{
if(Constants.editMenuChoices[editMenuChoicesCounter].equals("Copy"))
{
JMenuItem menuItem = new JMenuItem(new AbstractAction("Copy")
{
public void actionPerformed(ActionEvent e)
{
// Button pressed logic goes here
JOptionPane.showMessageDialog(null, "works");
}
});
newSubMenu.add(menuItem);
}
else if(Constants.editMenuChoices[editMenuChoicesCounter].equals("Paste"))
{
JMenuItem menuItem = new JMenuItem(new AbstractAction("Paste")
{
public void actionPerformed(ActionEvent e)
{
// Button pressed logic goes here
JOptionPane.showMessageDialog(null, "works");
}
});
newSubMenu.add(menuItem);
}
newMenu.add(newSubMenu);
}
}
else
{
JMenuItem newMenuItem = new JMenuItem(Constants.toolsMenuChoices[toolsItemCounter]);
newMenu.add(newMenuItem);
}
}
}
menuBar.add(newMenu);
}
super.setJMenuBar(menuBar);
super.setVisible(true);
}
public static void main(String[] args) {
MyJFrame mainFrame = new MyJFrame("My First GUI");
}
}
DisplayText.java
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package MyJFrame;
import javax.swing.JTextArea;
/**
*
* @author Alejandro
*/
public class DisplayText {
String fileName;
String fileContents;
public DisplayText(String fileName, String fileContents) {
this.fileName = fileName;
this.fileContents = fileContents;
}
public String getFileName() {
return fileName;
}
public String getFileContents() {
return fileContents;
}
// public String selectText()
// {
// ;
// }
}
BasicFile.java
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package MyJFrame;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
import java.io.StreamTokenizer;
import java.util.Scanner;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
/**
*
* @author Alejandro
*/
public class BasicFile
{
File f;
File backupFile;
public BasicFile()
{
JFileChooser choose = new JFileChooser(".");
int status = choose.showOpenDialog(null);
try
{
if (status != JFileChooser.APPROVE_OPTION)
throw new IOException();
f = choose.getSelectedFile();
if (!f.exists())
throw new FileNotFoundException();
}
catch(FileNotFoundException e)
{
display(e.toString(), "File not found ....");
}
catch(IOException e)
{
display(e.toString(), "Approve option was not selected");
}
}
void display(String msg, String s)
{
JOptionPane.showMessageDialog(null, msg, s, JOptionPane.ERROR_MESSAGE);
}
// Other methods may be included
String getContents() throws FileNotFoundException{
String content = "";
Scanner readFile = new Scanner(f);
while(readFile.hasNext()){
content = content + readFile.nextLine() + "\n";
}
return content;
}
long getFileSize(){
return f.length();
}
String getPath(){
return f.getPath();
}
String getName(){
return f.getName();
}
String backUpFile(){
return "File successfully backed up!";
}
String displayFileInfo(){
File parentDirectory = new File(f.getParent());
File[] filesAndDirectories = parentDirectory.listFiles();
String filesAndDirectoriesInfo = "";
for(File f : filesAndDirectories){
filesAndDirectoriesInfo = filesAndDirectoriesInfo + f.getAbsolutePath() + "\n";
}
return "File name: " + f.getName() + "\nAbsolute Path: " + f.getAbsolutePath() + "\nFiles and Directories:\n"
+ filesAndDirectoriesInfo + "\nFile Size: " + f.length() + " bytes";
}
void backupFile() throws FileNotFoundException
{
JOptionPane.showMessageDialog(null, "Please select or create a file for the backup", "File Backup", JOptionPane.INFORMATION_MESSAGE);
JFileChooser backupChoose = new JFileChooser(".");
int backupStatus = backupChoose.showSaveDialog(null);
try
{
if (backupStatus != JFileChooser.APPROVE_OPTION)
throw new IOException();
backupFile = backupChoose.getSelectedFile();
}
catch(IOException e)
{
display(e.toString(), "Approve option was not selected");
}
DataInputStream in = null;
DataOutputStream out = null;
try
{
in = new DataInputStream(new FileInputStream(f));
out = new DataOutputStream(new FileOutputStream(backupFile));
try
{
while (true)
{
byte data = in.readByte();
out.writeByte(data);
}
}
catch(EOFException e)
{
JOptionPane.showMessageDialog(null, "File was successfully backed up!",
"Complete", JOptionPane.INFORMATION_MESSAGE);
}
catch (IOException e)
{
JOptionPane.showMessageDialog(null, "File not found",
"Error", JOptionPane.INFORMATION_MESSAGE);
}
}
finally
{
try
{
in.close();
out.close();
}
catch(Exception e)
{
display(e.toString(), "Error");
}
}
}
String countFile()
{
try
{
int wordCount = 0;
int numberCount = 0;
int lineCount = 1;
int charCount = 0;
int totalWords = 0;
FileReader reader = new FileReader(f);
StreamTokenizer st = new StreamTokenizer(reader);
st.eolIsSignificant(true);
st.whitespaceChars(0, ' ');
st.wordChars('a','z');
st.wordChars('A','Z');
do{
if(st.ttype == StreamTokenizer.TT_NUMBER){
numberCount++;
charCount++;
}
if(st.ttype == StreamTokenizer.TT_WORD){
charCount += st.sval.length();
wordCount++;
}
if(st.ttype == StreamTokenizer.TT_EOL){
lineCount++;
}
if(st.ttype == StreamTokenizer.TT_EOF){
break;
}
}while(st.nextToken() != StreamTokenizer.TT_EOF);
reader.close();
totalWords = numberCount + wordCount;
return f.getName() + " has " + lineCount + " lines, "
+ totalWords + " words, " + numberCount + " numbers, " + charCount + " characters. (Approximately)";
}
catch(IOException e)
{
display(e.toString(), "Error");
}
return "null";
}
public String findString(String line, String currentLine, String stringToSearch, LineNumberReader lnr) throws Exception
{
if(currentLine != null)
{
String s = currentLine.toLowerCase();
if(s.contains(stringToSearch.toLowerCase()))
{
line = line + "\nLine " + lnr.getLineNumber() + ": " + currentLine;
}
return findString(line, lnr.readLine(), stringToSearch, lnr );
}
return line;
}
String search() throws FileNotFoundException, IOException, Exception{
String stringSearched = JOptionPane.showInputDialog("Enter string to search for: ");
LineNumberReader lnr = new LineNumberReader(new FileReader(f));
String results = findString("", lnr.readLine(), stringSearched, lnr);
return results;
}
}
Constants.java
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package MyJFrame;
/**
*
* @author Alejandro
*/
public interface Constants {
public static final String[] menus = {"File","Tools","Help"};
public static final String[] fileMenuChoices = {"New", "List Files","*", "Save As", "*", "Close"};
public static final String[] toolsMenuChoices = {"Sort", "Search", "Edit"};
public static final String[] editMenuChoices = {"Copy", "Paste"};
}
最佳答案
关于java - 为我正在创建的 GUI 中的 JMenuItem "Copy"提供低级功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27140893/
我开发了一个具有基本安全性的 Spring Boot 应用程序。我有两个具有相同路径和不同 http 方法的端点。当我使用默认密码/使用 application.yml 中给出的密码包含基本安全性时,
我的代码是这样的: 或者,像这样: 如果我首先列出 webm 源,Firefox 4 会播放它,但 Firefox 3.6 也会尝试播放它(但会失败,因为它不支持 webm)。
我希望提供一个泛型类型作为类型参数而不首先将其解析为具体类型。换句话说,我正在寻找一种方法来指定从基类继承时可以使用的类型映射函数。 示例(不正确的)语法,希望比我能解释得更好: abstract c
我在 .NET 中编写了一些桌面应用程序,它们既提供了用于正常使用的前端 GUI,也提供了用于其他需求(例如扩展、调度、自动化、高级使用等)的命令行界面。命名两个可执行文件的最佳做法是什么,因为它们构
我最近在这里思考了很多关于屏幕抓取以及它可能是一项什么样的任务。所以我提出以下问题。 作为网站开发人员,您是否会公开简单的 API 以防止用户抓取屏幕,例如 JSON 结果? 然后这些结果可以实现缓存
我正在为一个项目使用 Dojo 1.9,但我不明白 dojo.provide 的正确替代方案与传统风格相比,AMD 风格。我正在阅读 this文档页面。 很明显,这就是旧语法映射到新语法的方式: 旧
我正在开发一个 Angular 应用程序。当我使用 ng serve 正常运行它时,它运行没有任何错误.但是,当我运行 ng build --prod ,它给出了以下错误。 ERROR in Ille
我有一个 Mac 应用程序。在我的 Mac 应用程序中,我的屏幕之一有一个包含文本字段的 scrollView。在同一屏幕上,我有一个需要提供打印选项的按钮。可以打印文本字段的文本。打印按钮应调用 M
我已经成功地为普通媒体文件提供媒体文件,但是当我尝试提供管理媒体文件时,我失败了。请帮我找出问题所在,因为我已经尝试解决问题几个小时但没有运气(也一直在谷歌搜索并阅读有关提供静态文件的 django
我正在尝试创建一个简单的错误处理项目,它会在收到错误(例如 404、422 或 500)后为 JSON 提供错误数据。我使用来自 this 的代码网站,但它不适合我。 我实际上有这两个类: 基本 Co
假设我有一个名为 Number 的类(class),我打算对 Number 进行大量相等比较对象。我担心通用 Number::equals(Object o) 的“开销”(类比较等...)方法。在这种
假定以下情况: 对等方A只希望将音频流发送给对等方B 对等B只希望将视频流发送给对等A 从而, 与创建报价 var sdpConstraints = { “必填”:{ 'OfferToReceiveA
因为我有一些角度,所以我想检查角度模数 360°: double angle = 0; double expectedAngle = 360; angle.Should().B
这是我的程序中构建的 monad 堆栈: type Px a = ReaderT PConf (State PState) a 其中 PConf 和 PState 是保存应用程序的配置和状态的任意数据
因为我有一些角度,所以我想检查角度模数 360°: double angle = 0; double expectedAngle = 360; angle.Should().B
我有一个小程序需要以某些权限运行,这意味着加载时会显示一条警告消息。如果用户拒绝警告消息,我想重定向到错误页面并解释发生了什么。有什么办法可以做到这一点吗? 我研究过让计时器运行并在特定时间段后重定向
从我可以从 Firebase 文档中推断出,似乎需要服务器来提供静态内容(html和 javascript),所以你需要有一台托管机器和一个静态内容服务器在某处启动并运行,或某些服务托管静态站点。 对
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 3 年前。 Improv
我的项目根目录的静态文件夹中有一个文本文件。 我想提供它,所以我创建了: @csrf_exempt def display_text(request): content = retur
我目前正在研究指针,为了进一步理解我正在尝试使用指针将两个数值数组连接成一个。代码如下所示。 #include void concat(int **pa,int **pb,int **pc) {
我是一名优秀的程序员,十分优秀!