Java 如何在JOptionPane上添加文本区域
目前我有一个Java 如何在JOptionPane上添加文本区域,java,swing,joptionpane,swingx,Java,Swing,Joptionpane,Swingx,目前我有一个作业窗格。单击一个按钮,我执行以下命令行 JOptionPane.showInputDialog(this,"Enter your message","Messages",2); 它会打开一个带有文本框的弹出窗口。此文本框接受大约40/50个字符。 事实上,我的要求是在这个文本框中输入长消息(最多300个字符),它将停止此操作。那么我们想在这个输入对话框中创建一个文本区域?怎么可能? 有没有更好的解决办法? 提前感谢。包含这样的示例,另一个示例将JTextArea放入JOption
作业窗格
。单击一个按钮,我执行以下命令行
JOptionPane.showInputDialog(this,"Enter your message","Messages",2);
它会打开一个带有文本框的弹出窗口。此文本框接受大约40/50个字符。
事实上,我的要求是在这个文本框中输入长消息(最多300个字符),它将停止此操作。那么我们想在这个输入对话框中创建一个文本区域?怎么可能?
有没有更好的解决办法?
提前感谢。包含这样的示例,另一个示例将
JTextArea
放入JOptionPane.showConfirmDialog()
(类型)中,然后在对话框被释放后查询文本区域的内容(并检查返回结果以确保用户未取消对话框).虽然我不确定使用JOptionPane是否是实现此目的的最佳选项,但您可以将文本区域或任何其他表单组件添加到OptionPane中。由于您专门要求一个TextArea,我在下面的示例中添加了一个JTextField和一个JTextArea
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SpringLayout;
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame("Option Pane Text Area Example");
final SpringLayout layout = new SpringLayout();
final JPanel panel = new JPanel(layout);
panel.setPreferredSize(new Dimension(250, 160));
JLabel lblName = new JLabel("Name");
panel.add(lblName);
JTextField txtName = new JTextField(10);
txtName.setBorder(BorderFactory.createLineBorder(Color.black));
panel.add(txtName);
JLabel lblAddress = new JLabel("Address");
panel.add(lblAddress);
JTextArea txtAddress = new JTextArea();
txtAddress.setBorder(BorderFactory.createLineBorder(Color.black));
txtAddress.setLineWrap(true);
txtAddress.setWrapStyleWord(true);
JScrollPane scrollPane = new JScrollPane(txtAddress,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollPane.setPreferredSize(new Dimension(250, 100));
panel.add(scrollPane);
layout.putConstraint(SpringLayout.WEST, lblName,
0,
SpringLayout.WEST, panel);
layout.putConstraint(SpringLayout.NORTH, lblAddress,
10,
SpringLayout.SOUTH, lblName);
layout.putConstraint(SpringLayout.WEST, txtName,
25,
SpringLayout.EAST, lblName);
layout.putConstraint(SpringLayout.NORTH, scrollPane,
10,
SpringLayout.SOUTH, lblAddress);
int result = JOptionPane.showConfirmDialog(frame, panel,
"Text Box and Text Area Example", JOptionPane.OK_CANCEL_OPTION,
JOptionPane.PLAIN_MESSAGE);
if (result == JOptionPane.YES_OPTION) {
System.out
.println(txtName.getText() + ",\n" + txtAddress.getText());
} else {
System.out.println("Canceled");
}
System.exit(0);
}
}
但是,我建议您最好使用JDialog而不是JOptionPane来处理这些复杂的输入表单。不要使用“幻数”(例如,该方法调用中的“2”)。改为使用定义的常量。这可能有助于优化您的问题。@kleopatra-Hmm。。说得好。答案编辑为使用确认对话框。1)它是“摆动”(单数,以大写字母开头),而不是“摆动”。2) 我不是通灵者,所以我不知道你“不明白”的是什么。具体点。删除注释,指向我的IDE@andrewhompson的代码完成:我创建了JTextArea对象,并添加到JOptionPane.confirmationDialog。(..)但该方法的返回类型是int。其中,我需要用户输入的文本。
JOptionPane.confirmationDialog。(..)
没有这种方法。要获得更多帮助,请发布您的最佳尝试。
/**
*
* @param obj
* @param text
* @param title
* @return newText String
*/
public static String textAreaDialog(Object obj, String text, String title) {
if(title == null) {
title = "Your input";
}
JTextArea textArea = new JTextArea(text);
textArea.setColumns(30);
textArea.setRows(10);
textArea.setLineWrap(true);
textArea.setWrapStyleWord(true);
textArea.setSize(textArea.getPreferredSize().width, textArea.getPreferredSize().height);
int ret = JOptionPane.showConfirmDialog((Component) obj, new JScrollPane(textArea), title, JOptionPane.OK_OPTION);
if (ret == 0) {
return textArea.getText();
} else {
MyDialogs.Toast("Canceled by user\nChanges not saved", "Your choise");
}
return null;
}
public static void Toast(Object msg, String title) {
JOptionPane.showMessageDialog(null, msg, title, JOptionPane.OK_CANCEL_OPTION);
}