2013-04-13 2 views
0

, поэтому я пытаюсь вставить изображение под JTextArea, но мне не повезло, может ли кто-нибудь помочь? В основном, я спрашиваю, может ли кто-нибудь помочь сделать другой класс или подкласс, который это делает. Heres мой код:Вставка изображения под 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

Вы могли бы взглянуть на [это] (http://stackoverflow.com/questions/14152491/swing-graphics-on-jframe/14152568#14152568), который демонстрирует побаливать под текст JTextArea – MadProgrammer

ответ

1

Отъезд Background Panel. Когда вы добавите scrollpane на панель, это сделает scrollpane, viewport и текстовую область все непрозрачными, чтобы вы могли видеть изображение.

1

Основная проблема заключается в том, что JTextArea будет рисовать ее фон, и это текст в пределах paintComponent.

Простейшее решение - сделать прозрачным JTextArea и взять на себя управление покраской фона.

Этот пример в основном заполняет фон цветом фона, рисует изображение, а затем вызывает super.paintComponent, чтобы разрешить визуализацию текста.

enter image description here

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

    } 

} 
+0

Извините, это не совсем то, что я ищу. Когда я прокручиваю назад изображение остается внизу, им нужно, чтобы изображение находилось под JTextArea. – user2278319

+0

. Определите «снизу». – MadProgrammer

+0

Такие, как слои Photoshop, или складывание документов друг над другом. В нижней части находится JFrame, затем изображение, затем верхняя часть как jtextarea – user2278319

Смежные вопросы