是否可以使用keylistener显示以前隐藏的JFrame [英] Is it Possible to show a previously hidden JFrame using a keylistener

查看:100
本文介绍了是否可以使用keylistener显示以前隐藏的JFrame的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的代码,我基本上只是为最常见的监听器做了一个测试器,我可能会在以后的项目中使用,主要问题是在底部的keylistener,我试图重新显示框架但我认为不能这样做,请帮助
ps:不知道为什么进口不会出现正确。

here is my code, i basically just did a tester for the most common listeners, which i might later use in future projects, the main problem is in the keylistener at the bottom, i am trying to re-show the frame but i think it just cant be done that way, please help ps: no idea why the imports dont show up right.

package newpackage;

import java.awt.Color;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JSeparator;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

public class NewClass1 extends JFrame {


private JLabel item1,infomouse,infoclicks,infoKeys,writehere;
private JButton button1,button2,button3;
private JTextArea text1,status,KeyStatus;
private JTextField text2,text3,mouse,clicks,test;
private JSeparator sep1;
private int clicknumber;

public NewClass1() {
    super("Listener Tests");
    setLayout(null);
    sep1 = new JSeparator();

    button1 = new JButton("Button1");
    button2 = new JButton("Button2");
    button3 = new JButton("Button3");
    item1 = new JLabel("Button Status :");
    infomouse = new JLabel("Mouse Status :");
    infoclicks = new JLabel("Nº of clicks :");
    infoKeys = new JLabel("Keyboard status:");
    writehere = new JLabel("Write here: ");


    text1 = new JTextArea();
    text2 = new JTextField(20);
    text3 = new JTextField(20);
    status = new JTextArea();
    mouse  = new JTextField(20);
    clicks = new JTextField(4);
    KeyStatus = new JTextArea();
    test = new JTextField(3);
    clicks.setText(String.valueOf(clicknumber));

    text1.setEditable(true);
    text2.setEditable(false);
    text3.setEditable(false);
    status.setEditable(false);
    mouse.setEditable(false);
    clicks.setEditable(false);
    KeyStatus.setEditable(false);

    text1.setBounds(135, 310, 150, 20);
    text2.setBounds(135, 330, 150, 20);
    text3.setBounds(135, 350, 150, 20);
    status.setBounds(15, 20, 240, 20);
    infomouse.setBounds(5,45,120,20);
    infoKeys.setBounds(5,90,120,20);
    KeyStatus.setBounds(15,115,240,85);
    test.setBounds(15,225,240,20);
    mouse.setBounds(15,70,100,20);
    infoclicks.setBounds(195, 45, 140, 20);
    clicks.setBounds(195, 70, 60, 20);

    item1.setBounds(5, 0, 120, 20);
    button1.setBounds(10, 310, 115, 20);
    button2.setBounds(10, 330, 115, 20);
    button3.setBounds(10, 350, 115, 20);
    sep1.setBounds(5, 305, 285, 10);

    sep1.setBackground(Color.BLACK);
    status.setBackground(Color.LIGHT_GRAY);

    button1.addActionListener(new button1list());
    button2.addActionListener(new button1list());
    button3.addActionListener(new button1list());

    button1.addMouseListener(new MouseList());
    button2.addMouseListener(new MouseList());
    button3.addMouseListener(new MouseList());
    getContentPane().addMouseListener(new MouseList());
    test.addKeyListener(new KeyList());
    this.addKeyListener(new KeyList());
    test.requestFocus();

    add(item1);
    add(button1);
    add(button2);
    add(button3);
    add(text1);
    add(text2);
    add(text3);
    add(status);
    add(infomouse);
    add(mouse);
    add(infoclicks);
    add(clicks);
    add(infoKeys);
    add(KeyStatus);
    add(test);
    add(sep1);

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    try{
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    }catch (Exception e){System.out.println("Error");}
    SwingUtilities.updateComponentTreeUI(this);
    setSize(300, 400);
    setResizable(false);
    setVisible(true);
    test.setFocusable(true);
    test.setFocusTraversalKeysEnabled(false);
    setLocationRelativeTo(null);
}

public class button1list implements ActionListener {

    public void actionPerformed(ActionEvent e) {
        String buttonpressed = e.getActionCommand();
        if (buttonpressed.equals("Button1")) {
            text1.setText("just");
        } else if (buttonpressed.equals("Button2")) {
            text2.setText(text2.getText()+"testing ");
        } else if (buttonpressed.equals("Button3")) {
            text3.setText("this");
        } 
    }
}
    public class MouseList implements MouseListener{
        public void mouseEntered(MouseEvent e){
        if(e.getSource()==button1){
                status.setText("button 1 hovered");
            }
        else if(e.getSource()==button2){
                status.setText("button 2 hovered");
            }
        else if(e.getSource()==button3){
                status.setText("button 3 hovered");
            }
        }
        public void mouseExited(MouseEvent e){
                status.setText("");
        }
        public void mouseReleased(MouseEvent e){
            if(!status.getText().equals("")){
                status.replaceRange("", 0, 22);
            }
        }
        public void mousePressed(MouseEvent e){
            if(e.getSource()==button1){
                status.setText("button 1 being pressed");
            }
        else if(e.getSource()==button2){
                status.setText("button 2 being pressed");
            }
        else if(e.getSource()==button3){
                status.setText("button 3 being pressed");

            }
        }
        public void mouseClicked(MouseEvent e){
            clicknumber++;
            mouse.setText("mouse working");
            clicks.setText(String.valueOf(clicknumber));
      }
 }
    public class KeyList implements KeyListener{
        public void keyReleased(KeyEvent e){}
        public void keyPressed(KeyEvent e){
            KeyStatus.setText("");
            test.setText("");
            String full = e.paramString();
            String [] temp = null;
            temp = full.split(",");
            for(int i=0; i<7 ;i++){
            KeyStatus.append(temp[i] + "\n");
            }
            if(e.getKeyChar()=='h'){setVisible(false);
                test.requestFocus();
            }
            if(e.getKeyChar()=='s'){setVisible(true);}
        }
        public void keyTyped(KeyEvent e){}
    }

}

推荐答案

可见组件可以具有键盘焦点,并接收键盘和其他输入事件,但隐形组件不能具有焦点,也不能接收输入事件。当你使框架不可见时,它会停止接收输入事件,就像它的所有孩子一样,包括你要添加 KeyListener test 组件c $ c> to。

Visible components can have the keyboard focus, and recieve keyboard and other input events, but invisible components cannot have the focus, nor recieve input events. When you make the frame invisible, it stops recieving input events, as does all it's children, including the test component you are adding a KeyListener to.

要使其工作,您必须拥有一个可见组件,并将键盘事件转发到您的隐形框架。或者更好的是,从已经可见的组件中调用 invisibelFrame.setVisible(true)

To make this work, you will have to have a visible component, and forward keyboard events from that to your invisible frame. Or better, call invisibelFrame.setVisible(true) from your already visible component.

或者,您也许可以找到一些其他方式来触发显示框架。例如,带有上下文菜单的系统托盘组件是隐藏和显示应用程序框架的常见模式(对于某些用户来说,在此过程中引起了很多懊恼!)

Alternatively, you may be able to find some other way to trigger showing the frame. For example, a system tray component, with a context menu is a common pattern for hiding and showing application frames (and for some users, causing much chagrin in the process!)

参见

  • Sun Tutorial, how to use the System Tray

这篇关于是否可以使用keylistener显示以前隐藏的JFrame的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆