我试图在带有图片和一些按钮的标签上显示文字,但我注意到图像和文字都设置在同一个地方,这导致文字被图片覆盖。
我试图找到单独显示和设置边界的方法,但我找不到任何方法,如果我添加另一个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
这就是我想要做的事情
答案 0 :(得分:4)
您的问题看起来主要是您不使用布局管理器而是依赖于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();
}
});
}
}
显示为: