当前位置: 首页 > 知识库问答 >
问题:

JLabel和JTextArea不工作

申屠亦
2023-03-14

我正在做一个窗口,有一个大的文本区域和一个小的文本区域下。这是我到目前为止得到的:

这是我的代码:

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部分透明,这样我就可以看到背景,我如何移动“比如说:”到较小的textarea前面?

共有2个答案

酆光熙
2023-03-14

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

查看带有透明度的背景,了解使用透明背景时的问题,以及您可以使用的通用解决方案,这样您就不需要一直进行自定义绘画。

呼延光明
2023-03-14

默认情况下,JPanel使用流布局。您可能想更改布局管理器,就个人而言,我推荐类似于GridBagLayout的东西,但这只是我的建议。

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

要使JTextArea透明,必须使JScrollPane透明。

Swing只知道如何绘制完全不透明或完全透明的组件。您可以创建半透明效果,方法是使组件透明并覆盖其“绘制组件”(paintComponent)方法,并使用字母组合(AlphaComposite)或使用颜色(alpha值设置为低于255的值)绘制

比如说...

  • 使用光轮外观和感觉时无法在JTextArea背景上绘制图像
  • JTextArea不可选择,但仍显示“幽灵”光标
  • JFrame上的摇摆图形

和一般建议...

  • 键侦听器上的键绑定
  • 覆盖自定义组件的getPreferredSize,以在布局时获得更好的结果
  • 在设置大小上使用JFrame#pack,这将根据内容的需要计算窗口大小,并考虑窗框装饰

 类似资料:
  • 问题内容: 我想用setText()方法更新jlabel和jtextfield,但是它不起作用。但是,其余代码仍在工作。代码如下; 在这里,islemSureci是JLabel,而textFiled是JTextField。设置它们后,它不起作用。代码中的所有工作完成后,它们就会出现。请问原因是什么? 问题答案: 我认为您的意思是 “所有工作完成之后” 是从文件(您注释的行)中加载文本。我认为这段代

  • 我在一个非常简单的GUI中有一个JTextPane,我将它用作学习Java的游戏的输出控制台,我(尝试)将它与Windows类中的append方法一起使用,从另一个类(程序本身)或从command reader类调用它。理论上,它应该输出我输入的命令,在下几行中,它的输出来自所述程序。 另外,这里有一些示例输出 在调试过程中,我看到为Swing/AWT创建了一个线程,但我根本不了解线程,所以我只希

  • 基本上我有两个账户,SSPUserInput和SSPViewer。我想在SSPUserInput类中按下一个按钮,在SSPViewer中更改一个JLabel名称。这基本上是一个石头剪刀布游戏。这是我第一次在这里发帖,如果我做错了什么,我很抱歉。

  • 问题内容: 我正在使用捕获我中的更改。 但是,该方法将删除所有内容,然后粘贴文本。撤消操作时,我首先会看到一个空白区域,然后它会显示以前的文本。 繁殖方法: 运行以下代码 点击按钮 按撤消(您将看到一个空的文本区域!) 按撤消(您将看到实际的先前文本) 我想跳过3)。 问题答案: 您可以尝试如下操作:

  • 问题内容: 我一直在尝试为我的Roguelike游戏添加一个JLabel。不幸的是,它似乎不起作用。到目前为止,这是我的代码: 我已经阅读了一些其他问题的解决方案,并且只需将JLabel添加到另一个解决方案中就可以完成。它不按这里的预期工作,为什么? PS:我不想为我的JPanel使用JLayeredPane。 问题答案: 不要使用组件(即JLabels)创建游戏环境。相反,您可以绘制所有游戏对象

  • 所以我在我的桌面应用程序中创建了一个文本限制功能,但我似乎无法让它在准确的位置停止退行距。 限制的作用是,当用户没有单击Submit按钮时,它将函数CheckSize()作为一个新线程运行。CheckSize()查看jTextArea的内容,它有长度条件。一旦满足溢出长度(256个字符),就调用enforceLimit()将插入符号放在文本区域的末尾,并退格符一个字符。 现在的问题是,在测试过程中