JLabel和JTextArea无法正常工作

时间:2014-10-03 02:08:57

标签: java swing jlabel jtextarea

我正在创建一个文本区域较大且文本区域较小的窗口。这就是我到目前为止所做的:

这是我的代码:

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);
}'

如何让较大的textarea部分透明,以便我可以看到背景以及如何移动"说:"在较小的文本区域面前?

2 个答案:

答案 0 :(得分:4)

JPanel默认使用FlowLayout。你想要更改布局管理器,我个人推荐像GridBagLayout这样的东西,但那只是我。

有关详细信息,请参阅Laying Out Components Within a Container

要使JTextArea透视,您必须使JScrollPaneJViewPort透明。

Swing只知道如何绘制完全不透明或完全透明的组件。您可以通过使组件透明并覆盖它的paintComponent方法并使用AlphaComposite或使用Color绘制一个alpha值设置为某事来创建半透明效果低于255

例如......

一般建议......

  • Key Bindings超过KeyListener
  • 覆盖自定义组件的getPreferredSize以便在布局时获得更好的结果
  • 使用JFrame#pack而不是setSize,这将根据内容的需要计算窗口大小,并考虑窗框装饰

答案 1 :(得分:3)

  

如何让较大的textarea部分透明,以便我可以看到背景

使用透明背景和一般用途的解决方案时,请查看Backgrounds With Transparency是否有问题,您可以随时使用自定义绘画。