试图用Java弹出面板

时间:2015-12-19 06:31:34

标签: java

好的,我现在不想使用其他第三方图书馆。试着做自己的东西。

你们知道Windows中的日期控件是怎样的吗?看起来像一个纯文本框,旁边有一个按钮,点击按钮后,会打开一个新的较小窗口/日历来选择日期。这个窗口不会推开其他控件...它就像是在所有控件之上。

我正在尝试用Java做同样的事情。我只能到目前为止......

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class PopupPanelDemo{
public static void main(String ags[]){
    JFrame f = new JFrame();
    JLabel l = new JLabel("Date");
    JTextField t = new JTextField(10);
    JPanel p = new JPanel();
    JButton b =  new JButton("Show");

    p.setBorder(BorderFactory.createLineBorder(Color.black,1));
    p.setBackground(Color.red);
    p.setVisible(false);

    f.setLayout(new FlowLayout());
    f.add(l);
    f.add(t);
    f.add(b);
    f.add(p);

    f.setSize(400,400);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setLocationRelativeTo(null);
    f.setVisible(true);

    b.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            p.setSize(t.getWidth(), t.getHeight());
            p.setLocation(t.getLocation().x, t.getLocation().y + t.getHeight());
            p.setVisible(true);
        }
    });
}
}

我没有让它正常工作。只有当我单击按钮两次时,JPanel才能正确显示,如代码所示。

java中是否存在类似zindex的HTML?

这是正确的路线还是我应该检查一些其他控件?

PS。 JPanel将由我的日历面板取代。我刚刚在这里加入了必要的东西。

我正在使用Window 8.1和Java 1.8.0_45。

1 个答案:

答案 0 :(得分:1)

我建议使用PopupFactory(就像swing一样显示工具提示和菜单):

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

class PopupPanelDemo {
    public static void main(String ags[]) {
        JFrame f = new JFrame();
        JLabel l = new JLabel("Date");
        JTextField t = new JTextField(10);
        JPanel p = new JPanel();
        JButton b = new JButton("Show");

        p.setBorder(BorderFactory.createLineBorder(Color.black, 1));
        p.setBackground(Color.red);
        p.add(new JLabel("Test"));

        f.setLayout(new FlowLayout());
        f.add(l);
        f.add(t);
        f.add(b);

        f.setSize(400, 400);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLocationRelativeTo(null);
        f.setVisible(true);

        b.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                PopupFactory pf = PopupFactory.getSharedInstance();
                p.setSize(t.getWidth(), t.getHeight());
                p.setPreferredSize(new Dimension(t.getWidth(), t.getHeight()));
                Point l = t.getLocationOnScreen();
                Popup popup = pf.getPopup(f, p, l.x, l.y + t.getHeight());
                popup.show();
            }
        });
    }
}