Java返回字符串撇号并返回不正常,因为我想要它

时间:2013-12-02 21:38:10

标签: java html return apostrophe

我正在开发一个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);
}

}

2 个答案:

答案 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中的值,则必须执行更多操作。您可以尝试JDialogJOptionPane.showInputDialog作为Hovercraft Full Of Eels建议。如果您不想使用其中一个,则可能需要进行自己的线程同步。您可能想查看Concurrency in Swing教程。为wait定义的方法(例如notifywait)也可以为您提供帮助。

P.S。不要从事件发送线程中调用{{1}},否则您的程序将被卡住。