GridBaglayout non posizionando i componenti a Page Start
-
11-10-2019 - |
Domanda
Sto usando il layout della borsa per la mia applicazione Java, ma il problema è che non sta posizionando i componenti nell'inizio della pagina. Ecco il codice che sto usando:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Trial extends JFrame {
JLabel banner;
Container c;
GridBagConstraints gbc = new GridBagConstraints();
GridBagLayout gbl;
public Trial()
{
setTitle("Attendence Manager");
setIconImage(Toolkit.getDefaultToolkit().getImage("images/icon.png"));
Dimension dim= Toolkit.getDefaultToolkit().getScreenSize();
setSize(new Dimension(dim.width-20,dim.height-100));
c= getContentPane();
gbl= new GridBagLayout();
setLayout(gbl);
banner = new JLabel(new ImageIcon("images/banner.jpg"));
gbc.anchor=GridBagConstraints.PAGE_START;
gbc.gridx=0;
gbc.gridy=0;
gbc.gridwidth=GridBagConstraints.REMAINDER;
c.add(banner,gbc);
this.setVisible(true);
addWindowListener(new MyWindowAdapter());
}
public static void main(String[] args) {
Trial t = new Trial();
}
}
class MyWindowAdapter extends WindowAdapter
{
//LoginPage sp;
public MyWindowAdapter()
{
}
@Override
public void windowClosing(WindowEvent we)
{
System.exit(0);
}
}
Ho anche provato
gbc.anchor = GridBagConstraints.FIRST_LINE_START;
Anche questo non ha funzionato. Questo è l'output che sto ottenendo:
Soluzione
Per prima cosa devi impostare
gbc.fill = GridBagConstraints.BOTH;
gbc.weightx = 1.0;
gbc.weighty = 1.0;
Ma questo farà che far riempire solo il jlabel per riempire l'intero spazio non l'icona all'interno del jlabel. Se si desidera ridimensionare la tua immagine e utilizzare l'intero spazio. Ti suggerirei di leggere l'immagine in un BufferedImage
e poi sovrascrivere il file paintComponent()
Metodo per disegnare un'istanza in scala di gradini. Come questo:
public Trail() {
setTitle("Attendence Manager");
setIconImage(Toolkit.getDefaultToolkit().getImage("images/icon.png"));
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
setSize(new Dimension(dim.width - 20, dim.height - 100));
c = getContentPane();
gbl = new GridBagLayout();
setLayout(gbl);
try {
final BufferedImage image = ImageIO.read(new File("images/sample.jpg"));
banner = new JLabel(){
public void paintComponent(Graphics g) {
g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
}
};
gbc.fill = GridBagConstraints.BOTH;
gbc.weightx = 1.0;
gbc.weighty = 1.0;
c.add(banner, gbc);
}
catch (IOException ex) {
Logger.getLogger(Trail.class.getName()).log(Level.SEVERE, null, ex);
}
this.setVisible(true);
addWindowListener(new MyWindowAdapter());
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow