【问题标题】:JPanel elements are not appearingJPanel 元素未出现
【发布时间】:2013-06-09 03:33:30
【问题描述】:

我正在使用 Swing 库向用户询问他们的邮政编码,但出现的只是一个框,没有文本框或我添加的任何其他元素(参见代码)。此外,您可能需要知道我正在尝试在我的 public static void main(String[] args) 方法中获取 int AskZip()。

    private static int zip;
    public static int AskZip() {
        JFrame zaWindow = new JFrame("What Zipcode");
        zaWindow.setSize(200, 300);
        JPanel jp = new JPanel();
        final JTextField tf = new JTextField("Enter Zip Here");
        JLabel label = new JLabel();
        JButton button = new JButton("Get Weather");
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String sZip = tf.getText();
                int rZip = 0;
                try {
                    if (sZip.length() != 5) {
                        JOptionPane.showMessageDialog(null, "Invalid zipcode!", "Error", JOptionPane.ERROR_MESSAGE);
                    } else {
                        rZip = Integer.parseInt(sZip);
                    }
                } catch (NumberFormatException arg) {
                    JOptionPane.showMessageDialog(null, "Invalid zipcode!", "Error", JOptionPane.ERROR_MESSAGE);
                }
                zip = rZip;
            }
        });
        label.setText("What is your zipcode?");
        jp.add(label);
        jp.add(tf);
        jp.add(button);
        zaWindow.add(jp);
        return zip;
    }

【问题讨论】:

  • JFrame zaWindow.. 应该是模态对话框或JOptionPane。请务必在setVisible(true) 之前的对话框中调用pack()(应该是最后一个)。

标签: java swing jpanel layout-manager


【解决方案1】:

JFrame zaWindow..

这应该是一个模态对话框或JOptionPane。例如。这个国家有 3 个州,每个州都有 10 个邮政编码。

import java.awt.*;
import java.util.ArrayList;
import javax.swing.*;
import javax.swing.event.ChangeListener;

class ZipQuery {

    public static void main(String[] args) {
        Runnable r = new Runnable() {

            @Override
            public void run() {
                ZipNumberModel znm = new ZipNumberModel();
                JSpinner zip = new JSpinner(znm);

                JOptionPane.showMessageDialog(null, zip, "Enter Zipcode", JOptionPane.QUESTION_MESSAGE);
                System.out.println("User chose " + znm.getValue());
            }
        };
        // Swing GUIs should be created and updated on the EDT
        // http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html
        SwingUtilities.invokeLater(r);
    }
}

class ZipNumberModel extends SpinnerNumberModel {

    private ArrayList<Integer> zipCodes;
    private int index = 0;

    ZipNumberModel() {
        zipCodes = new ArrayList<Integer>();
        int zip = 10000;
        for (int jj = 1; jj < 4; jj++) {
            for (int ii = jj * zip; ii < jj * zip + 10; ii++) {
                zipCodes.add(new Integer(ii));
            }
        }
    }

    @Override
    public Object getValue() {
        return zipCodes.get(index);
    }

    @Override
    public Object getNextValue() {
        if (index < zipCodes.size()-1) {
            index++;
        } else {
            index = 0;
        }
        return zipCodes.get(index);
    }

    @Override
    public Object getPreviousValue() {
        if (index > 0) {
            index--;
        } else {
            index = zipCodes.size()-1;
        }
        return zipCodes.get(index);
    }
}

【讨论】:

  • 很好的答案,但是,你完全改变了代码......他只是想知道为什么它没有出现。
  • +1 用于改进验证;另见Creating Custom Spinner Models and Editors
  • @HenryHarris “他只是想知道为什么它没有出现。” 如果他只是想知道如何向自己的脚开枪,我不会帮忙。你会? OTOH,我确实在一个多小时前的评论中解决了这个问题..“请务必在 setVisible(true) 之前的对话框中调用 pack()(应该是最后一个)。”
  • @AndrewThompson 有几天(我会提供帮助;))
  • @HenryHarris 当我们告诉他们时,他们想知道如何解决它。这样可以节省时间;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 2020-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多