【发布时间】:2011-03-25 10:15:07
【问题描述】:
如何在 java 中使用 swing 操作窗口框架?比如如何改变颜色,如何让它不是PC主题的默认样式,而是变成图片?
【问题讨论】:
如何在 java 中使用 swing 操作窗口框架?比如如何改变颜色,如何让它不是PC主题的默认样式,而是变成图片?
【问题讨论】:
要更改颜色,您可以在框架对象或面板对象上使用 setBackground(Color c) 方法。 示例:
JFrame fr=new JFrame("Color demo");
fr.setBackground(Color.red); // color set to red
fr.setSize(900,200); // size changed
fr.setResizable(false); // you cant resize your window now
要进一步自定义您的 java 框架,您可以关注 this 或 this one。 你可以在this website开始挥杆
【讨论】:
所有与窗口在 Swing 中的外观有关的事情都可以通过外观 (LaF) 来处理。请参阅the LaF tag 了解更多信息(我写的)。大多数外观都会设置窗口内容和其中所有组件的样式。
在 JDK 中随 Swing 提供了许多默认的 LaF。它们包括 Motif、Metal 和 Synth(这是您自定义的空白样式)。您可以在线查找和下载更多内容。在显示 GUI 之前,您可以通过将它们放入类路径并在 main 方法中运行 UIManager.setLookAndFeel(...) 来使用它们中的任何一个。
听起来您正在专门寻找一种自定义窗框的方法,但这种做法并不常见。我个人不会推荐它,但如果你真的想要,你可以通过在Window 上调用setUndecorated(true) 来关闭框架装饰。然后你会留下一个无边框的窗口。然后,您必须决定如何重新实现所需的窗口功能,例如使用自定义关闭按钮关闭。
【讨论】:
据我所知,没有办法做到这一点。您可以为您的自定义窗口创建一个自己的类,例如扩展 JWindow。然后,您可以自己创建样式。这只是一点点工作。
// add pacakge and imports as needed...
/**
* Sample class implementation for windows with own frame style.
* Additional constructors may be added as needed. Default constructor used
* to show principle.
*/
public class MyWindow extends JWindow {
public MyWindow() {
super();
initUI();
}
private void initUI() {
setLayout(new BorderLayout());
add(new MyWindowFrameTop(this));
add(new MyWindowFrameLeft(this));
add(new MyWindowFrameRight(this));
add(new MyWindowFrameBottom(this));
}
}
正如 Java API 文档所说,JWindow 是“一等公民”。它是桌面中的一个功能齐全的窗口,但错过了关闭、最大化、最小化和窗口菜单等窗口操作的所有实现。通过使用 BorderLayout 并将框架对象的自己的实现投入工作,可以像上面一样添加此功能的实现。 MyWindowFrameXXX 对象可能是 JPanel,用于绘制所需的框架框部件、标题图像等。还可以为窗口操作添加按钮并实现鼠标操作以调整大小。要实现这一点,框架对象需要父窗口引用才能在窗口上执行所有操作。
在这里写下所有内容会走得很远。我想,原理已经展示出来了,我也不知道真正要实现的实际效果是什么。
【讨论】: