Il problema non è con il JFrame
, il problema è con il tuo codice. Possiamo passare il resto della nostra vita naturale a indovinare cosa c'è che non va o pubblicare un codice di esempio.
Ora tocca a voi, siamo in grado di continuare a cercare di buttare indovinare sbagliato dopo sbaglia a voi, tutti noi frustrante, oppure è in grado di aiutarci ad aiutare ...
Ecco due esempi che ho fatto. Il primo utilizza uno JLabel
come contenuto principale per uno JPanel
, in cui sono posizionati i componenti figlio. Bello e semplice
Il secondo utilizza un numero personalizzato JPanel
che dipinge l'immagine sullo sfondo del componente. Quindi lo uso per sostituire il riquadro del contenuto dei frame. Questo è un po 'più coinvolto, ma ha il vantaggio di essere facilmente aggiornato (che sostituisce il riquadro del contenuto non avrà effetto il resto del programma)
Esempio 1: JLabel
utilizzato come sfondo
public class TestBackground {
public static final String BACKGROUND_PATH = "/Volumes/Macintosh HD2/Dropbox/MT015.jpg";
public static void main(String[] args) {
new TestBackground();
}
public TestBackground() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException ex) {
} catch (InstantiationException ex) {
} catch (IllegalAccessException ex) {
} catch (UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame("Testing");
frame.setLayout(new BorderLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new LabelPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
protected class LabelPane extends JPanel {
public LabelPane() {
BufferedImage bg = null;
try {
bg = ImageIO.read(new File(BACKGROUND_PATH));
} catch (IOException ex) {
ex.printStackTrace();
}
JLabel label = new JLabel(new ImageIcon(bg));
setLayout(new BorderLayout());
add(label);
label.setLayout(new GridBagLayout());
JLabel lblMessage = new JLabel("Look at me!");
lblMessage.setForeground(Color.WHITE);
lblMessage.setFont(lblMessage.getFont().deriveFont(Font.BOLD, 48));
label.add(lblMessage);
}
}
}
Esempio 2: L'immagine utilizzata come sfondo, sostituendo riquadro del contenuto ...
public class TestBackground {
public static final String BACKGROUND_PATH = "/Volumes/Macintosh HD2/Dropbox/MT015.jpg";
public static void main(String[] args) {
new TestBackground();
}
public TestBackground() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException ex) {
} catch (InstantiationException ex) {
} catch (IllegalAccessException ex) {
} catch (UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame("Testing");
frame.setLayout(new BorderLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(new BackgroundPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
protected class BackgroundPane extends JPanel {
private BufferedImage bg = null;
public BackgroundPane() {
try {
bg = ImageIO.read(new File(BACKGROUND_PATH));
} catch (IOException ex) {
ex.printStackTrace();
}
setLayout(new GridBagLayout());
JLabel lblMessage = new JLabel("Look at me!");
lblMessage.setForeground(Color.WHITE);
lblMessage.setFont(lblMessage.getFont().deriveFont(Font.BOLD, 48));
add(lblMessage);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(1153, 823);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (bg != null) {
g.drawImage(bg, 0, 0, this);
}
}
}
}
Sei sicuro che la dimensione dell'immagine corrisponda a quella dello schermo? Stai permettendo all'immagine di espandersi o contrarsi, se no? Prendi in considerazione la possibilità di creare e pubblicare un [sscce] (http://sscce.org) che mostri il tuo problema per noi. –
'JLabel background = new JLabel (" Nuova etichetta "); \t \t background.setIcon (new ImageIcon (ProgramDriver.class.getResource ("/ Pictures/GB_Blue.jpg"))); \t \t background.setBounds (0, 0, 652, 496); \t \t Preferences.add (background); ' – flyinghigh
Si prega di non inserire il codice nei commenti poiché sono quasi illeggibili. Pubblicalo come una modifica alla tua domanda. Ma sembra che il codice che hai postato non stia espandendo l'immagine *, quindi non mi sorprende che tu abbia un confine. La risposta di Eng probabilmente funzionerà meglio, 1+ a lui. –