如何在Java中单击JButton时setAlwaysOnTop()?

时间:2011-12-30 15:55:47

标签: java swing jbutton

我想在java中使用setAlwaysOnTop(boolean)

当我点击setAlwaysOnTop()并且此JButton有自己的JButton

时,我想actionListener

我的问题是我不知道在这种情况下如何设置JFrame,因为它不在构造函数中,也没有方法getFrame()

我尝试在构造函数中创建一个方法,但它不起作用:S。

更新:

private class optionAction implements ActionListener{
    public void actionPerformed(ActionEvent e){
        if(e.getSource() == onTop)  //onTop is a menuItem when I click it it should make the frame Always on top.
        frame.setAlwaysOnTop(true); //This does not work of course just to demonstrat you what I want to do
    }
}

4 个答案:

答案 0 :(得分:1)

一个想法可能是将对JFrame的引用传递给ActionListener实现的构造函数。

也许是这样的:

class MyActionListener implements ActionListener {

    private JFrame jFrame;

    public MyActionListener(JFrame jFrame) { 
         this.jFrame = jframe; 
    }

    public void onClick(Event event) {
        jFrame.setAlwaysOnTop(true);
    }
}

答案 1 :(得分:1)

以下代码行向您展示如何通过直接实现分配给构造函数内声明的按钮的ActionListener()来完成它。 (您也可以在班上的其他任何地方执行此操作。)

class MyFrame extends JFrame {

    public MyFrame() {
        // ...

        JButton button = new JButton("PRESS");
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                setAlwaysOnTop(true);
                // Alternatively use MyFrame.this.setAlwaysOnTop(true);
            }
        });
        add(button);

        // ...
    }    
}

答案 2 :(得分:0)

创建一个名为ontop的布尔值

boolean ontop = false; 
jbutton.addActionListener(new ActionListener()) {
    public void actionPerformed(ActionEvent e){
       if (ontop) {
           frame.setAlwaysOnTop(false);
           ontop = false;
       }
       else {frame.setAlwaysOnTop(true); ontop = true}

});

答案 3 :(得分:-1)

此问题的正确工作代码如下:

private class optionAction implements ActionListener{
        public void actionPerformed(ActionEvent e){
            if(e.getSource() == onTop)  //onTop is a menuItem
            setAlwaysOnTop(true); //This does not work of course just to demonstrate you what I want to do
        }
    }

这个原因不起作用,因为我在setAlwaysOnTop对象上设置了JFrame,该对象在该类中不存在。

要在setALwaysOnTop上设置JFrame,您必须删除frame.,然后添加`setAlwaysOnTop()