setUndecorated()不使用PLAF

时间:2014-02-02 00:19:02

标签: java swing jframe look-and-feel

我正在构建一个桌面应用程序,需要使用外部JFrame来为用户提供各种绘图工具。

这是我当前的JFrame的样子:

![在此处输入图片说明] [1]

这是班级:

public class ChartToolFrame extends JFrame implements ActionListener{

    private JToolBar tools;

    public ChartToolFrame(JToolBar tools){
        setUndecorated(true);
        this.tools = tools;
        getContentPane().setLayout(new BorderLayout());
        getContentPane().add(tools, BorderLayout.NORTH);

        setResizable(false);
        this.setAlwaysOnTop(true);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        setVisible(true);
        pack();
    }

}

我目前正在使用Acryl的外观和感觉。当我调用setUndecorated(true)时,它没有摆脱标题栏。依赖JButton来处理JFrame至关重要,因为在关闭时,必须终止某种“操作模式”并且必须执行代码。

有没有办法使用与之相关的非默认外观来解开JFrame的设计?或者更好的是,有没有办法将方法调用与处理JFrame相关联?

2 个答案:

答案 0 :(得分:1)

setUndecorated(boolean)的文档明确说明..

  

禁用或启用此框架的装饰。

     

此方法只能在框架不可显示时调用 。 ..

答案 1 :(得分:0)

解决了它。我没有专注于JButton在dispose上执行代码,而是提供了一个重写的dispose()方法,它执行我需要的代码。这是我添加到ChartToolFrame类的方法:

@Override
public void dispose(){
   //code needed to be executed
   super.dispose();
}

希望这有助于其他人。