Rendering grafico nella barra del titolo

La grafica continua a mostrare nella barra del titolo. Io uso un’immagine bufferizzata incapsulata in una jlabel e uso gli oggetti grafici risultanti per disegnare rettangoli nel mio codice. Questa è la parte importante del costruttore della class jframe:

super(); BufferedImage image=new BufferedImage(680,581,BufferedImage.TYPE_INT_ARGB); m_graphicsObject =image.getGraphics(); JLabel label=new JLabel(new ImageIcon(image)); // buttons, mouse events and other controls use listeners to handle actions // these listener are classs btn1 = new JButton("Go!"); //btn1.setPreferredSize(new Dimension(100, 30)); btn1.addActionListener(new button_go_Click()); //listener 1 btn2 = new JButton("Clear!"); //btn2.setPreferredSize(new Dimension(100, 30)); btn2.addActionListener(new button_clear_Click()); //listener 2 //always add created buttons/controls to form JPanel panel=new JPanel(new GridLayout(20,2)); panel.add(btn1); panel.add(btn2); Container pane = this.getContentPane(); pane.add(label); pane.add(panel, BorderLayout.EAST); this.setSize(680,581); this.setVisible(true); 

Il problema è che non stai prendendo in considerazione il bordo del frame (e probabilmente anche la barra del menu) quando imposti la dimensione del frame …

Invece di usare this.setSize(680,581) che causerà il rendering dell’immagine all’interno dei bordi dei frame (e oltre nello spazio non visibile), dovresti chiamare semplicemente JFrame#pack e lasciare che il frame decida come meglio dimensionarlo ( in base alla dimensione preferita del suo contenuto)

inserisci la descrizione dell'immagine quiinserisci la descrizione dell'immagine qui

A sinistra, dimensionamento assoluto, giusto dimensionamento preferito

 public class SimpleImageLabel { public static void main(String[] args) { new SimpleImageLabel(); } public SimpleImageLabel() { 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) { } JLabel imageLabel = new JLabel(); try { imageLabel.setIcon(new ImageIcon(ImageIO.read(new File("/path/to/image")))); } catch (Exception e) { } JFrame frame = new JFrame("Test"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new BorderLayout()); frame.add(imageLabel); frame.pack(); // <-- The better way // frame.setSize(imageLabel.getPreferredSize()); // <-- The not better way frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } } 

Come ho detto prima, dovresti impostare la posizione della tua JLabel usando

 aJLabel.setLocation(Point p) 

O

 aJLabel.setLocation(int x, int y) 

se la tua immagine è troppo grande, dovrai ridimensionarla anche per ottenere un buon posizionamento (:

I migliori saluti.