Java JLabel和JTextArea不工作
我正在制作一个窗口,它有一个大的文本区域和一个小的文本区域。这就是我到目前为止所做的: 这是我的代码:Java JLabel和JTextArea不工作,java,swing,jlabel,jtextarea,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();
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以下的颜色绘制,可以创建半透明效果
例如
和一般建议
过键侦听器
覆盖自定义组件的getPreferredSize,以便在布局时获得更好的结果
使用JFramepack over setSize,这将根据内容的需要计算窗口大小,并考虑窗框装饰
如何使较大的文本区域部分透明,以便可以看到背景
检查一下使用透明背景和通用解决方案时出现的问题,这样您就不必一直进行自定义绘制了。如果没有看到您的第一张照片,我真的无能为力,但是一些不相关的建议:1不要用paintComponent方法读取图像,因为你不必要地重新读取图像并减慢了一个必须绝对快速的方法。另外,2从不向文本组件添加KeyListener,我不在乎Swing教程是否显示了这一点,这只是一件危险的事情,而且有更好的方法可以在文本组件中捕获输入。3您的布局管理器应该帮助您定位组件。Oh和4遵循MadProgrammer的建议,因为他知道前后摆动。JTextArea输入=新的JTextArea 1,46;可能应该是JTextField输入=新的JTextField 46;谢谢你,我使用了GridBagLayout,它将所有内容完美地对齐。我使JViewPort透明,并修复了我的背景问题。