菜鸟问题!谢谢指教! 我在用J2SE的APPLET开发的游戏里面要做个聊天系统,也具有发聊天表情的功能,我用JScrollPane内嵌JTextPane完成了聊天,但是我发现了几个问题哈,聊天窗口由于不是透明的,就挡到了后面的场景,还有就是滚动条的样子太难看了,有没有那位前辈指教下如何透明化,和改变滚动条的样式? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这两个问题都可以用一种方法解决,写个类继承自你要改变的组件的UI类,自己写里面的绘制代码这样,你想要什么样的就自己写什么样的然后在要改变外观的组件对象上调用setUI()方法 java有支持此效果import java.awt.BorderLayout;import java.awt.Color;import java.awt.Container;import java.awt.Dimension;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.geom.RoundRectangle2D;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JSlider;import javax.swing.border.LineBorder;import javax.swing.event.ChangeEvent;import javax.swing.event.ChangeListener;import com.sun.jna.examples.WindowUtils;/** * Transparent JFrame use JNA * * @author ruislan <a href="mailto:[email protected]"/> * @version 0.1.0 */public class Test { private JFrame frame; private JPanel container; private JSlider slider; private JPanel titleBar; private JLabel titleLabel; private JButton closeButton; public static void main(String[] args) { new Test().launch(); } private void launch() { createUI(); launchUI(); } protected void launchUI() { frame.setVisible(true); } protected void createUI() { System.setProperty("sun.java2d.noddraw", "true"); frame = new JFrame(); frame.setSize(200, 150); frame.setAlwaysOnTop(true); frame.setUndecorated(true); container = new JPanel(); frame.setContentPane(container); container.setLayout(new BorderLayout()); container.add(new JLabel("Ubunto vs Vista, I like both."), BorderLayout.CENTER); container.setBorder(new LineBorder(Color.BLACK)); titleBar = new JPanel(); titleBar.setLayout(new BorderLayout()); titleLabel = new JLabel("JNA is great!"); titleBar.add(titleLabel, BorderLayout.CENTER); titleBar.setBorder(new LineBorder(Color.GRAY)); closeButton = new JButton("X"); closeButton.setFocusPainted(false); closeButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); titleBar.add(closeButton, BorderLayout.EAST); container.add(titleBar, BorderLayout.NORTH); slider = new JSlider(0, 100); slider.setValue(100); slider.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { float value = slider.getValue(); WindowUtils.setWindowAlpha(frame, value * 0.01f); } }); container.add(slider, BorderLayout.SOUTH); RoundRectangle2D.Float mask = new RoundRectangle2D.Float(0, 0, frame .getWidth(), frame.getHeight(), 20, 20); WindowUtils.setWindowMask(frame, mask); centerWindow(frame); } public static void centerWindow(Container window) { Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); int w = window.getSize().width; int h = window.getSize().height; int x = (dim.width - w) / 2; int y = (dim.height - h) / 2; window.setLocation(x, y); }}两个依赖包jna.jar 和 examples.jarhttp://blog.csdn.net/djsl6071/archive/2007/10/22/1836647.aspx 两为高手说的方法,我去试试,dracularking,你给的效果页面我看了,非常漂亮,很适合我现在要实现的样子!谢谢了! dracularking,我没有那个com.sun.jna的包哦,能不能发我个?谢谢了! java如何保存时间到文件,如何计算时间差 长文长分页 如何取随机率?急!在线等待 JAVA类成员的赋值问题 和 二维数组赋值问题 哪位大侠给看看这句话的意思?(多态调用递归) 请教下,这个程序的有什么错误? 求详细解释 我自己理解的不知道对不对 请推荐一本好的java的图书 数字签名为何速度变的很慢?(答就有分) 关于JAVA程序发布的问题,一定给分,请从事JAVA编程工作的人解答 问问一个JSP工程如何在自己电脑中运行? 谁能提供我jsmooth软件的详细使用说明,我都快崩溃了,老打不成功
写个类继承自你要改变的组件的UI类,自己写里面的绘制代码
这样,你想要什么样的就自己写什么样的
然后在要改变外观的组件对象上调用setUI()方法
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.RoundRectangle2D;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.border.LineBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;import com.sun.jna.examples.WindowUtils;/**
* Transparent JFrame use JNA
*
* @author ruislan <a href="mailto:[email protected]"/>
* @version 0.1.0
*/
public class Test {
private JFrame frame;
private JPanel container;
private JSlider slider;
private JPanel titleBar;
private JLabel titleLabel;
private JButton closeButton; public static void main(String[] args) {
new Test().launch();
} private void launch() {
createUI();
launchUI();
} protected void launchUI() {
frame.setVisible(true);
} protected void createUI() {
System.setProperty("sun.java2d.noddraw", "true");
frame = new JFrame();
frame.setSize(200, 150);
frame.setAlwaysOnTop(true);
frame.setUndecorated(true); container = new JPanel();
frame.setContentPane(container);
container.setLayout(new BorderLayout());
container.add(new JLabel("Ubunto vs Vista, I like both."),
BorderLayout.CENTER);
container.setBorder(new LineBorder(Color.BLACK)); titleBar = new JPanel();
titleBar.setLayout(new BorderLayout());
titleLabel = new JLabel("JNA is great!");
titleBar.add(titleLabel, BorderLayout.CENTER);
titleBar.setBorder(new LineBorder(Color.GRAY));
closeButton = new JButton("X");
closeButton.setFocusPainted(false);
closeButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
titleBar.add(closeButton, BorderLayout.EAST);
container.add(titleBar, BorderLayout.NORTH); slider = new JSlider(0, 100);
slider.setValue(100);
slider.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
float value = slider.getValue();
WindowUtils.setWindowAlpha(frame, value * 0.01f);
}
});
container.add(slider, BorderLayout.SOUTH);
RoundRectangle2D.Float mask = new RoundRectangle2D.Float(0, 0, frame
.getWidth(), frame.getHeight(), 20, 20);
WindowUtils.setWindowMask(frame, mask);
centerWindow(frame);
} public static void centerWindow(Container window) {
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
int w = window.getSize().width;
int h = window.getSize().height;
int x = (dim.width - w) / 2;
int y = (dim.height - h) / 2;
window.setLocation(x, y);
}
}
两个依赖包jna.jar 和 examples.jarhttp://blog.csdn.net/djsl6071/archive/2007/10/22/1836647.aspx