我正在开发一个html编辑程序。在程序中我有一个功能,我已经命名为easy insert。这附带一个插入系统,它还允许您自动将类和其他类似的东西写入div的修饰符。我的代码有两个问题。 1.我返回的代码是代码,因此它包含一个撇号,使代码无效。 2.返回在按钮内部,使用动作侦听器和动作执行。这意味着我的代码中有错误。 Void方法不能返回字符串变量。请帮忙。这是我的代码。
package main;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class InsertSettings {
public static String getSettings(){
JFrame f = new JFrame("Insert settings");
JTextField classSetting = new JTextField(20);
JButton done = new JButton("Done!");
done.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
return "class=""+classSetting+"" "; //THIS LINE HERE
}
});
f.setLayout(new GridLayout(2,1));
f.add(new JLabel("Class:"));
f.add(classSetting);
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.pack();
f.setVisible(true);
}
}
调用getSettings
的代码package main;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
public class EasyInsert {
public static void start(final JTextArea textArea){
JFrame f = new JFrame("Easy insert tool");
JButton insertDiv = new JButton("Insert <div> element");
JButton insertHtmlTag = new JButton("Insert <html> tag");
JButton insertTestElement = new JButton("Insert testing element");
final String newLnCharacter = "\n";
insertDiv.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
textArea.insert("<div>"+newLnCharacter+newLnCharacter+"</div>",textArea.getCaretPosition());
textArea.setCaretPosition(textArea.getCaretPosition()-7);
}
});
insertHtmlTag.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
textArea.insert("<html>"+newLnCharacter+newLnCharacter+"</html>", textArea.getCaretPosition());
textArea.setCaretPosition(textArea.getCaretPosition()-8);
}
});
insertTestElement.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
String settings = InsertSettings.getSettings();
textArea.insert("<div "+settings+">"+newLnCharacter+newLnCharacter+"</div>", textArea.getCaretPosition());
textArea.setCaretPosition(textArea.getCaretPosition()-7);
}
});
f.setLayout(new GridLayout(3,1));
f.add(insertDiv, BorderLayout.PAGE_START);
f.add(insertHtmlTag);
f.add(insertTestElement);
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.pack();
f.setVisible(true);
}
}
答案 0 :(得分:2)
你试图从actionPerformed方法返回一个String形式,这是不允许的,因为正如编译器告诉你的那样,它被声明为无效且无法返回任何内容。相反,你应该在actionPerformed中调用一个方法。请告诉我们:String应该去哪里?什么代码调用并显示此JFrame?
编辑:同样如JB Nizet所述,如果你想在字符串中显示双引号,请将其转义:
String foo = "This is \"foo\" String".
我想知道你真正想要做的是创建一个模态JDialog,并让对话框获取用户信息,然后返回一个String。如果是这样,请考虑使用JOptionPane。
您还需要从JTextField中提取文本,这需要您在其上调用getText()
。
修改强>
只需要一个JOptionPane:
public static String getSettings() {
String input = JOptionPane.showInputDialog(null, "Class: ",
"Insert Settings", JOptionPane.QUESTION_MESSAGE);
return String.format("class=\"%s\"", input);
}
答案 1 :(得分:0)
getSettings
将创建按钮并显示它,但不会等待它被点击。因此,如果您希望编写等待按钮的getSettings
方法,然后返回JTextField中的值,则必须执行更多操作。您可以尝试JDialog
或JOptionPane.showInputDialog
作为Hovercraft Full Of Eels建议。如果您不想使用其中一个,则可能需要进行自己的线程同步。您可能想查看Concurrency in Swing教程。为wait
定义的方法(例如notify
和wait
)也可以为您提供帮助。
P.S。不要从事件发送线程中调用{{1}},否则您的程序将被卡住。