好的,我现在不想使用其他第三方图书馆。试着做自己的东西。
你们知道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。
答案 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();
}
});
}
}