[英]JFrame Draw text in a label with a picture
我試圖在帶有圖片和一些按鈕的標簽上顯示文本,但我注意到圖像和文本都設置在同一位置,這導致文本被圖片覆蓋。
我嘗試尋找分別顯示和設置范圍的方法,但找不到任何方法,如果添加另一個JLabel,它將打開一個新窗口,我需要使用同一窗口
public void carga_img(String name,int cols,int rengs){
ventana.setVisible(false);
//----
//Defino tamaño de la ventana que mantiene la imagen y los botones
//ventana.setSize(519,391);
ventana.setSize(415,400);
imagen=null;
//Inicializo la imagen que se va a cargar
imagen = t.getImage (name);
icono.setImage(imagen);
//Creo la etiqueta con la imagen
etiqueta.setIcon(icono);
//Defino posición de inicio y el tamano de la etiqueta, ancho y alto
etiqueta.setBounds(0, 0,cols,rengs);
prev.setBounds(0, 400-88-50, 100,50);
ini.setBounds(100, 400-88-50, 100,50);
fin.setBounds(200, 400-88-50, 100,50);
sigte.setBounds(300, 400-88-50, 100,50);
Nombre.setBounds(0, 400-88, 100,50);
Apellido.setBounds(100, 400-88, 100,50);
Busca.setBounds(200, 400-88, 100,50);
Fin.setBounds(300, 400-88, 100,50);
//-------
//Indico yo administrare como se insertan los componentes en la ventana (null)
ventana.getContentPane().setLayout(null);
//Agrego mi etiqueta y los botones
ventana.getContentPane().add(etiqueta);
ventana.getContentPane().add(sigte);
ventana.getContentPane().add(prev);
ventana.getContentPane().add(ini);
ventana.getContentPane().add(fin);
ventana.getContentPane().add(Nombre);
ventana.getContentPane().add(Apellido);
ventana.getContentPane().add(Busca);
ventana.getContentPane().add(Fin);
//Muestro la ventana
ventana.setVisible(true);
}
(這是針對學校中的一個項目的,因此應該不太重視在其他平台上運行)
這就是我得到的
http://i.stack.imgur.com/kmWW4.jpg
這就是我想做的
您的問題似乎主要是您不使用布局管理器而是依賴於null布局和setBounds(...)
。 同樣,這會導致一些非常脆弱的GUI,很難對其進行增強,調試或更改。 相反,為什么不讓布局經理為您做繁重的工作呢?
例如:
例如:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.*;
public class SimpleGui extends JPanel {
public static final String DUKE_IMG_PATH = "https://duke.kenai.com/guitar/."
+ "Thumbnails/DukeAsKeith-daylight.png.png";
public SimpleGui() throws IOException {
URL imgUrl = new URL(DUKE_IMG_PATH);
BufferedImage image = ImageIO.read(imgUrl);
ImageIcon icon = new ImageIcon(image);
JLabel label = new JLabel(icon);
JPanel labelsPanel = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.weightx = 1.0;
gbc.anchor = GridBagConstraints.WEST;
labelsPanel.add(new JLabel("Number: XXXXXXX", SwingConstants.LEADING),
gbc);
gbc.gridy++;
labelsPanel.add(
new JLabel("First Name: XXXXXXX", SwingConstants.LEADING), gbc);
gbc.gridy++;
labelsPanel.add(new JLabel("Last Name: XXXXXXX", SwingConstants.LEADING),
gbc);
JPanel topPanel = new JPanel();
topPanel.setLayout(new BoxLayout(topPanel, BoxLayout.LINE_AXIS));
topPanel.add(label);
topPanel.add(labelsPanel);
topPanel.add(Box.createGlue());
JPanel bottomPanel = new JPanel(new GridLayout(2, 4));
String[] btnLabels = { "Previo", "Inicio", "Ultimo", "Sigiente",
"Nombre", "Apellido", "Busca", "Fin" };
for (String btnLabel : btnLabels) {
bottomPanel.add(new JButton(btnLabel));
}
setLayout(new BorderLayout());
add(topPanel, BorderLayout.PAGE_START);
add(Box.createRigidArea(new Dimension(400, 200)), BorderLayout.CENTER);
add(bottomPanel, BorderLayout.PAGE_END);
}
private static void createAndShowGui() {
SimpleGui mainPanel;
try {
mainPanel = new SimpleGui();
JFrame frame = new JFrame("SimpleGui");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
顯示為:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.