2015-11-30 85 views
0

這是我的代碼。對不起,任何格式錯誤。無論如何,當我創建我的JTextField並添加到JFrame中時,我只能看到我的圖像圖標,但我沒有看到它的JTextField。我究竟做錯了什麼?我無法將JTextfield添加到ImageIcon頂部的JFrame上

package com.company; 

import javax.imageio.ImageIO; 
import javax.swing.*; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 
public class Main extends JFrame { 

public static void main(String[] args) throws IOException { 

    String path = "C:\\Users\\home\\Pictures\\Papa2.jpg"; 
    File file = new File(path); 
    BufferedImage image = ImageIO.read(file); 
    JLabel label = new JLabel(new ImageIcon(image)); 
    JFrame f = new JFrame(); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    f.getContentPane().add(label); 
    f.pack(); 
    f.setLocation(200, 200); 
    f.setVisible(true); 
    f.setResizable(false); 

    JTextField text = new JTextField(40); 
    text.setVisible(true); 
    f.add(text); 
} 
    } 
+0

1)調用'f.setVisible(true)'執行'f.add(text)'後。 2)你不需要'text.setVisible(true)'。 3)更改'contentPane'的佈局管理器或將'f'添加到與BorderLayout.CENTER不同的東西,否則您將只能在下次看到該文本字段。 –

+1

是的LuxxMiner,並加強:默認情況下,JFrame使用BorderLayout,它只顯示在中心的一個組件。創建一個'JPanel',添加標籤和文本字段,然後將JPanel添加到JFrame中。你將不得不嘗試面板的佈局來獲得你想要的位置關係。 – markspace

+0

@markspace但是OP已經改變了'JFrame'的'contentPane',從而改變了將要使用的佈局管理器(它不是默認的'JLabel'沒有佈局管理器) – MadProgrammer

回答

1

將組件添加到JPanel,然後面板到框架最適合我。

這樣的:

public static void main(String[] args) throws IOException { 

String path = "C:\\Users\\home\\Pictures\\Papa2.jpg"; 
File file = new File(path); 
BufferedImage image = ImageIO.read(file); 
JLabel label = new JLabel(new ImageIcon(image)); 
JFrame f = new JFrame(); 
JTextField text = new JTextField(40); 
JPanel panel = new JPanel(); 
panel.add(label); 
panel.add(text); 
f.add(panel); 
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
f.getContentPane().add(label); 
f.pack(); 
f.setLocation(200, 200); 
f.setVisible(true); 
f.setResizable(false); 
} 

} 
1

我只看到我的形象的圖標,但我沒有看到JTextField的過去。

如果你想使圖像與畫在圖像的頂部的文本字段中的背景圖片,然後你可以這樣做:

JLabel label = new JLabel(new ImageIcon(...)); 
label.setLayout(new FlowLayout()); 
JTextField textField = new JTextField(20); 
label.add(textField); 

JFrame frame = new JFrame(); 
frame.add(label, BorderLayout.CENTER); 
frame.pack(); 
frame.setVisible(true); 

這隻會工作,如果文本字段比圖像小。