我刚刚学习JAVA并且在代码的这个特定部分遇到了一些麻烦.我搜索了几个网站并尝试了许多不同的方法,但似乎无法弄清楚如何实现一个适用于不同可能性的方法.
int playerChoice = Integer.parseInt(JOptionPane.showInputDialog(null, "Enter number for corresponding selection:\n"
+ " (1) - ROCK\n (2) - PAPER\n (3) - SCISSORS\n")) - 1;
Run Code Online (Sandbox Code Playgroud)
我想我需要进行某种类型的验证,即使用户没有输入以及不是1,2或3的输入.任何人都有关于如何实现这一点的建议?
我尝试了一个while循环,一个if语句在将输入转换为整数之前检查null,以及几个不同类型的if else if方法.
提前致谢!
嗨,我觉得相当愚蠢,因为我应该能做到这一点,但我做不到!我也在网上和我的书中检查过,这么简单的事情没什么(或者我可以看到它).
我想做的是向用户提供JOptionPane.showInputDialog(null,...并检查
如果它没有通过任何这些测试重新显示框,所以他们必须这样做,欧元这是一个简单的事情,但我只是无法解决它:(
我的愚蠢请怜悯!在此先感谢任何帮助它是合适的!
正如你从我上面的主题中看到的
那样,我想知道如何解雇由于另一个JOptionPane而变得无关紧要的JOptionPane,并且由于某些原因,用户没有通过单击ok按钮解除第一个问题(对于例).
我在其他网站上看到过一些类似问题的软件,人们建议简单地做:
JOptionPane.getRootFrame().dispose();
Run Code Online (Sandbox Code Playgroud)
但是我如何为每个JOptionPane存储一个引用,并且只能解雇那个想要的引用.
谢谢
编辑:
代码示例:
package Gui;
import javax.swing.JOptionPane;
import java.awt.*;
/**
*
* @author
*/
public class JpanelMainView extends javax.swing.JPanel {
/** Creates new form JpanelMainView */
public JpanelMainView() {
initComponents();
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() …Run Code Online (Sandbox Code Playgroud) 我如何在每一行显示JOptionPane.showinputDialog()多个JButtons?我不是在谈论Yes,No,Cancel按钮,但多个自定义标记JButtons,它显示的内容区域JOptionPane.showinputDialog?
所以我需要从按钮中获取按钮的值JOptionPane.
我想创建一个JOptionPane允许用户选择要连接的IP地址和端口的.它的结构应如此,
IP地址:[textfield here]
港口:[textfield here]
取消确定
标签应该左对齐,文本字段也应该左对齐.我无法在这里对故事板进行真正的建模,但基本上文本字段不应该错位,即使标签和文本字段之间有空格也是如此.
每个标签和文本字段对应位于单独的行上,取消确定按钮应与文本框下方的右侧对齐.
在代码中有没有办法做到这一点?
这可能是一个非常简单的事情,我忽略了,但我似乎无法弄明白.
我有以下更新JTable的方法:
class TableModel extends AbstractTableModel {
public void updateTable() {
try {
// update table here
...
} catch (NullPointerException npe) {
isOpenDialog = true;
JOptionPane.showMessageDialog(null, "No active shares found on this IP!");
isOpenDialog = false;
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我不希望isOpenDialog在按下消息对话框上的OK按钮之前将boolean设置为false,因为如果用户按下enter键,它将激活KeyListener文本字段上的事件并且如果设置了它将再次触发整个代码块到false.
KeyListener代码的一部分如下所示:
public class KeyReleased implements KeyListener {
...
@Override
public void keyReleased(KeyEvent ke) {
if(txtIPField.getText().matches(IPADDRESS_PATTERN)) {
validIP = true;
} else {
validIP = false;
}
if (ke.getKeyCode() == KeyEvent.VK_ENTER) {
if (validIP …Run Code Online (Sandbox Code Playgroud) 我有一个java swing应用程序,期望用户选择YES或NO来自JOptionPane.showConfirmDialog
由于JOptionPane停止线程并等待用户输入,因此我的代码不能自动测试.
无论如何我可以以编程方式解决这个问题吗?或模拟是或否?
在我的测试中,出现一个确认对话框,我必须按下是或否按钮.
更新
我发现了一个很棒的选择.
我创建了一个OptionPane基本上所有不同类型的消息所需的接口.然后我创建了一个默认实现,只是降级到JOptionPane的静态方法.然后我创建了一个YesMockOptionPane,它基本上为所有确认消息返回YES_OPTION,并为所有NO_OPTIONS创建一个NoMockOptionPane.
这是代码:
<<usage>>
class Foo {
OptionPane optionPane = new DefaultOptionPane();
public void someMethod() {
if (optionPane.showConfirmDialog(null, "choose yes or no", "Please confirm",
JOptionPane.YES_NO_OPTION) != JOptionPane.YES_OPTION)
return;
//User pressed yes
}
public void setOptionPane(OptionPane o) {
this.optionPane = o;
}
}
//Snippet of the interface
public interface OptionPane {
int showConfirmDialog(Component parentComponent,
Object message, String title, int optionType);
}
public class DefaultOptionPane implements OptionPane {
@Override …Run Code Online (Sandbox Code Playgroud) 我是Swing的新手,我有一个情况.我正在设计一个应用程序,它根据xml文件输入(元数据)动态呈现GUI组件.现在,我的大多数JTextField都将InputVerifier设置为它们,以进行验证.只要输入无效,输入验证程序就会弹出JOptionPane.
现在,如果用户输入无效数据并向前移动并单击面板上的按钮,则会弹出一个对话框,用户必须对其进行响应.但在此之后,按钮也不会绘制以释放状态.它仍然看起来像被按下但实际上它不是.由于整个代码非常混乱,我将问题场景放在下面的代码中: -
我应该怎么做才能让JButton看起来没穿#?如果逻辑也被解释,我将不胜感激.
提前致谢.
package test;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.InputVerifier;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class VerifierTest extends JFrame {
private static final long serialVersionUID = 1L;
public VerifierTest() {
JTextField tf;
tf = new JTextField("TextField1");
getContentPane().add(tf, BorderLayout.NORTH);
tf.setInputVerifier(new PassVerifier());
final JButton b = new JButton("Button");
b.setVerifyInputWhenFocusTarget(true);
getContentPane().add(b, BorderLayout.EAST);
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (b.hasFocus())
System.out.println("Button clicked");
}
}); …Run Code Online (Sandbox Code Playgroud) 我从来没有在java中编写GUI.这次我也可以跳过它并args用作UI(用户界面).但我想知道是否有一种简单的方法可以创建一个小的GUI来让用户选择其中一个选项.换句话说,要实现askUser()用户可以从下拉菜单中选择并按"确定"的功能.我花了一些时间学习这个主题,但甚至不确定我知道这个任务需要哪种类型的GUI.JFrame的?JPanel的?JMenu的?谢谢.
这是所需功能的一个例子.
package trygui;
public class Main {
public static void main(String[] args) {
String[] choices = new String[]{"cats", "dogs"};
int choice = askUser(choices);
System.out.println("selected: " + choices[choice]);
}
static int askUser(String[] choices) {
// create pop-up dialog
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
更新:我使用Netbeans,如果这可以有所作为.
由于在默认的LookAndFeel中字体大小太小,我使用几行代码将其设置为Nimbus,而我的JOptionPane显示具有不同大小的Yes和No按钮. 是仍然非常小,而" 否"设置为我指定的大小.有谁知道为什么或如何解决它?
public static void setUIFont(Font a){
FontUIResource ax=new FontUIResource(a);
javax.swing.UIManager.put("OptionPane.messageFont", ax);
javax.swing.UIManager.put("OptionPane.buttonFont", ax);
javax.swing.UIManager.put("OptionPane.Font", ax);
javax.swing.UIManager.put("InternalFrame.titleFont", ax);
javax.swing.UIManager.put("TextField.font", ax);
javax.swing.UIManager.put("ComboBox.font", ax);
}
Run Code Online (Sandbox Code Playgroud)
...
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
class UseNimBus extends SwingInvoker{
public void run(){
JDialog.setDefaultLookAndFeelDecorated(true);
setUIFont(new FontUIResource(new Font(ufont, Font.PLAIN, 20)));
}
}
(new UseNimBus()).execute();// just invokeLater()
Run Code Online (Sandbox Code Playgroud)
以下行显示选项窗格,但它具有" 是"和" 否",具有不同的大小.这是正常还是只是我的问题?
inputValuex=JOptionPane.showConfirmDialog(
myWin, "Are you exiting?", "You clicked X", JOptionPane.YES_NO_OPTION);
Run Code Online (Sandbox Code Playgroud)
还是行不通.我试过使用代码
javax.swing.UIManager.put("OptionPane.isYesLast", true);
更改是按钮的位置,但它没有任何效果.我只是想看看如何设置这些值,如布尔值.
另外,我甚至列出了UIManager.getDefaults() …
java ×10
joptionpane ×10
swing ×9
jbutton ×1
jcombobox ×1
jtable ×1
jtextfield ×1
keylistener ×1
nimbus ×1
popup ×1
unit-testing ×1
validation ×1