我正在创建一个文本区域较大且文本区域较小的窗口。这就是我到目前为止所做的:
这是我的代码:
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部分透明,以便我可以看到背景以及如何移动"说:"在较小的文本区域面前?
答案 0 :(得分:4)
JPanel
默认使用FlowLayout
。你想要更改布局管理器,我个人推荐像GridBagLayout
这样的东西,但那只是我。
有关详细信息,请参阅Laying Out Components Within a Container
要使JTextArea
透视,您必须使JScrollPane
和JViewPort
透明。
Swing只知道如何绘制完全不透明或完全透明的组件。您可以通过使组件透明并覆盖它的paintComponent
方法并使用AlphaComposite
或使用Color
绘制一个alpha
值设置为某事来创建半透明效果低于255
例如......
一般建议......
KeyListener
getPreferredSize
以便在布局时获得更好的结果JFrame#pack
而不是setSize
,这将根据内容的需要计算窗口大小,并考虑窗框装饰答案 1 :(得分:3)
如何让较大的textarea部分透明,以便我可以看到背景
使用透明背景和一般用途的解决方案时,请查看Backgrounds With Transparency是否有问题,您可以随时使用自定义绘画。