我在用J2SE的APPLET开发的游戏里面要做个聊天系统,也具有发聊天表情的功能,我用JScrollPane内嵌JTextPane完成了聊天,但是我发现了几个问题哈,聊天窗口由于不是透明的,就挡到了后面的场景,还有就是滚动条的样子太难看了,有没有那位前辈指教下如何透明化,和改变滚动条的样式?

解决方案 »

  1.   

    这两个问题都可以用一种方法解决,
    写个类继承自你要改变的组件的UI类,自己写里面的绘制代码
    这样,你想要什么样的就自己写什么样的
    然后在要改变外观的组件对象上调用setUI()方法
      

  2.   

    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
      

  3.   

    两为高手说的方法,我去试试,dracularking,你给的效果页面我看了,非常漂亮,很适合我现在要实现的样子!谢谢了!
      

  4.   

    dracularking,我没有那个com.sun.jna的包哦,能不能发我个?谢谢了!