繁体   English   中英

JLabel和JTextArea无法正常工作

[英]JLabel and JTextArea not working

我正在制作一个窗口,该窗口下有一个大文本区域和一个小文本区域。 这是我到目前为止所拥有的:

这是我的代码:

JPanel window=new JPanel(){
    protected void paintComponent(Graphics g){
        super.paintComponent(g);
        ImageIcon ii=new ImageIcon("textEffect.png");
        Image i=ii.getImage();
        g.drawImage(i,0,0,null,this);
    }
};
JLabel label=new JLabel("Say: ");
JTextArea dialog=new JTextArea(20,50);
JTextArea input=new JTextArea(1,46);
JScrollPane scroll=new JScrollPane(
    dialog,
    JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
    JScrollPane.HORIZONTAL_SCROLLBAR_NEVER
);

//main method
public static void main(String[] args){
    new Window();
}
//Makes window and starts bot
public Window(){
    super("Pollockoraptor");
    setSize(600,400);
    setResizable(false);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    dialog.setEditable(false);
    dialog.setOpaque(false);
    dialog.setBackground(new Color(0, 0, 0, 0));
    dialog.setLineWrap(true);
    input.addKeyListener(this);
    label.setVerticalTextPosition(SwingConstants.BOTTOM);
    label.setHorizontalTextPosition(SwingConstants.LEFT);
    window.add(scroll);
    window.add(label);
    window.add(input);
    window.setBackground(new Color(97,118,131));
    add(window);
    setVisible(true);
}'

如何使较大的文本区域部分透明,以便可以看到背景,以及如何将“说:”移到较小的文本区域的前面?

JPanel默认使用FlowLayout 您可能要亲自更改布局管理器,我建议您使用GridBagLayout东西,但这就是我自己。

有关更多详细信息,请参见在容器中布置组件

为了使JTextArea透明,您将必须使JScrollPane及其JViewPort透明。

Swing仅知道如何绘制完全不透明或完全透明的组件。 您可以通过以下方式创建半透明效果:使组件透明并覆盖其paintComponent方法,并使用AlphaComposite或使用alpha值设置为255以下的Color绘画a

例如...

和一般建议...

  • 通过KeyListener 键绑定
  • 覆盖自定义组件的getPreferredSize ,以便在布局时获得更好的结果
  • setSize使用JFrame#pack ,这将根据内容的需要来计算窗口大小,同时还要考虑到窗口框架的装饰

如何使较大的文本区域部分透明,以便可以看到背景

在使用透明背景和通用解决方案时,请查看“ 具有透明性的背景”,以解决问题,而无需始终进行自定义绘制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM