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

在JTextArea下插入图像

赫连卓
2023-03-14

所以我试图在JTextArea下面插入一个图像,但我运气不好,有人能帮我吗?基本上我想问的是,是否有人可以帮助创建另一个这样做的类或子类。这是我的密码:

import java.awt.*;
import javax.swing.*;


public class t{
    private JFrame f; //Main frame
    private JTextArea t; // Text area   private JScrollPane sbrText; // Scroll pane for text area
    private JButton btnQuit; // Quit Program

    public t(){ //Constructor
        // Create Frame
        f = new JFrame("Test");         
        f.getContentPane().setLayout(new FlowLayout());         
        String essay = "Test"; 
        // Create Scrolling Text Area in Swing
        t = new JTextArea(essay, 25, 35);
        t.setEditable(false); 
        Font f = new Font("Verdana", Font.BOLD, 12 );
        t.setFont( f );         
        t.setLineWrap(true);        
        sbrText = new JScrollPane(t);
        sbrText.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
                // Create Quit Button
        btnQuit = new JButton("Quit");
        btnQuit.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e){
                    System.exit(0);         
                }           }       );
    }


    public void launchFrame(){ // Create Layout
        // Add text area and button to frame 
       f.getContentPane().add(sbrText);
        f.getContentPane().add(btnQuit);
                 // Close when the close button is clicked
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Display Frame
        f.pack(); // Adjusts frame to size of components
        f.setSize(450,480);
        f.setResizable(false);
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String args[]){
        t gui = new t();     
        gui.launchFrame();
    } 

}

共有2个答案

赫连昕
2023-03-14

查看背景面板。当您将滚动窗格添加到面板时,它将使滚动窗格、视口和文本区域都不不透明,以便您可以看到图像。

孙德本
2023-03-14

基本问题是JTextArea将绘制它的背景和它在画组件中的文本。

最简单的解决方案是使JTextArea透明,并接管绘制背景的控制。

这个例子基本上用背景色填充背景,绘制图像,然后调用super。绘制组件(paintComponent),以允许渲染文本。

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class TransparentTextArea {

    public static void main(String[] args) {
        new TransparentTextArea();
    }

    public TransparentTextArea() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame("Test");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new JScrollPane(new CustomTextArea()));
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }

        });
    }

    public class CustomTextArea extends JTextArea {

        private BufferedImage image;

        public CustomTextArea() {
            super(20, 20);
            try {
                image = ImageIO.read(new File("/Users/swhitehead/Dropbox/MegaTokyo/Miho_Small_02.png"));
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }

        @Override
        public boolean isOpaque() {
            return false;
        }

        @Override
        protected void paintComponent(Graphics g) {
            Graphics2D g2d = (Graphics2D) g.create();
            g2d.setColor(getBackground());
            g2d.fillRect(0, 0, getWidth(), getHeight());
            if (image != null) {
                int x = getWidth() - image.getWidth();
                int y = getHeight() - image.getHeight();
                g2d.drawImage(image, x, y, this);    
            }
            super.paintComponent(g2d);
            g2d.dispose();
        }

    }

}
 类似资料:
  • 本文向大家介绍C#下listview如何插入图片,包括了C#下listview如何插入图片的使用技巧和注意事项,需要的朋友参考一下 如何在listview中插入图片,相信大家很想知道,下面就为大家分享具体步骤: 第一步:在窗体中拖入ListView控件和imageList控件; 第二步:设置imageList控件的Images属性,添加你想要的图片; 第三步:设置ListView控件的SmallI

  • 主要内容:将图像插入PDF文档在前一章中,我们已经学习如何从现有的PDF文档中提取文本。 在本章中,将讨论如何将图像插入PDF文档。 将图像插入PDF文档 分别使用类的以及类的方法将图像插入到PDF文档中。 以下是从现有PDF文档中提取文本的步骤。 第1步:加载现有的PDF文档 使用类的静态方法加载现有的PDF文档。 此方法接受一个文件对象作为参数,因为这是一个静态方法,可以使用类名称调用它,如下所示。 第2步:检索页面 在P

  • 好的,我对Java非常、非常陌生,而且是自学成才的,所以不要拿我糟糕的编码开玩笑;)我在玩弄JavaFX,试图将图像插入到边框窗格布局中。 这是控制器中的方法,我正在使用它来显示图像,但我无法让文件路径工作。它目前有“/图像/BrownBear.jpg”作为文件路径,但我尝试了相对路径- com/jaimependelbury/哺乳类动物/images/brownBear.jpg 完整的路径和中间

  • 对于我当前的项目,我需要为用户提供使用他可以插入文本的图像编写文本的可能性。使用vaadin7的内置RichTextArea,我可以编写文本,但不会从用户的本地驱动器上传/插入图像,只需指定图像在Web上可用的url。我如何连接到RTA的“插入图像”功能?或者有其他方法可以实现它吗?

  • 我正在使用套接字为java创建一个聊天。我的问题是,在用户的框架上,当我第一次按enter时,插入符号会转到下一行,之后我必须按backspace,否则会发送一个空白句子和我写的句子。我使用KeyListener来按enter键,并向keyPressed函数输入以下代码。 事情是,这只工作后,我第一次使用聊天。例如,我发送了一些东西,如果我按Enter键,插入符号就会转到下一行。然后,如果我写了什