Swing JButton Icon verschiebt sich

  • Themenstarter Themenstarter Gelöschtes Mitglied 58116
  • Beginndatum Beginndatum
G

Gelöschtes Mitglied 58116

Gast
Hi!
Bild sagt eigentlich alles.😵
Das rote Kästchen zeigt die Position des JButtons, wurde nachträglich hinzugefügt.

Ich bin mir sehr sicher, dass der Button dort ist, da es dort MouseEnteredEvents triggert.😀
zthn7g1.png
Hier der Code
(Ganz rechts sind fast immer Kommentare):
Java:
public class Main extends JFrame {
   public int FrameWidth;
   public int FrameHeight;
   public static int Width;
   public static int Height;
   public JLabel lblB = new JLabel("Background");
   JButton bttnC = new JButton("Close");
   public BufferedImage bi;

   public static void main(String[] args) throws IOException {                                                                                                                       //
       EventQueue.invokeLater(new Runnable() {                                                                                                                                       //
           public void run() {                                                                                                                                                       //
               try {                                                                                                                                                               //
                   Main frame = new Main();                                                                                                                                       //Selbsterklärend
                   frame.setUndecorated(true);                                                                                                                                       //Selbsterklärend
                   frame.setVisible(true);                                                                                                                                           //Selbsterklärend
                   Width = (int) Toolkit.getDefaultToolkit().getScreenSize().getWidth();                                                                                           //Weite des Hauptbildschirms, benötigt für Calc.nMF003, siehe Calc.java
                   Height = (int) Toolkit.getDefaultToolkit().getScreenSize().getHeight();                                                                                           //Höhe des Hauptbildschirms, benötigt für Calc.nMF004, siehe Calc.java
               } catch (Exception e) {                                                                                                                                               //Selbsterklärend
                   e.printStackTrace();                                                                                                                                           //Selbsterklärend
               }                                                                                                                                                                   //
           }                                                                                                                                                                       //
       });                                                                                                                                                                           //
   }                                                                                                                                                                               // 
   public Main() throws IOException {                                                                                                                                               //
       FrameWidth = Calc.nMF003;                                                                                                                                                   //Calc.nMF003 Rechnet die Weite, die das Frame haben soll, aus, siehe Calc.java 
       FrameHeight = Calc.nMF004;                                                                                                                                                   //Calc.nMF004 Rechnet die Höhe, die das Frame haben soll, aus, siehe Calc.java
       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);                                                                                                                               //Selbsterklärend
       setSize(FrameWidth, FrameHeight);                                                                                                                                           //Selbsterklärend
       setTitle("TechGamez Launcher");                                                                                                                                               //Selbsterklärend
       setLocation(Calc.nMF001, Calc.nMF002);                                                                                                                                       //Mitte
       BufferedImage Icon = ImageIO.read(getClass().getResourceAsStream("/Pictures/LauncherIcon.png"));                                                                           //ProgramIcon
       setIconImage(Icon);                                                                                                                                                           //ProgramIcon
       lblB.setBounds(0, 0, FrameWidth, FrameHeight);                                                                                                                               //Hintergrund
       lblB.setIcon(new ImageIcon(Scaler.scale(ImageIO.read(getClass().getClassLoader().getResource("Pictures/Background.png")), Calc.nMF003, Calc.nMF004)));                       //Hintergrund
       bttnC.setBounds(lblCX, 0, Calc.nC002, Calc.nC002);                                                                                                                           //Selbsterklärend
       int lblCX = (int) (((double)FrameWidth)- ((double)Calc.nC002));                                                                                                               //Rechnet X-Position des JButtons aus, Calc.nC002 rechnet die Größe des JButtons aus (Ist ein Quadrat), siehe Calc.java
       bttnC.setBackground(Color.GREEN);   ´                                                                                                                                       //Selbsterklärend
       bttnC.setIcon(new ImageIcon(Scaler.scale(ImageIO.read(getClass().getClassLoader().getResource("Pictures/Close/CloseUnselected.png")), Calc.nC002, Calc.nC002)));           //Müsste nachvollziehbar sein
       bttnC.setRolloverIcon(new ImageIcon(Scaler.scale(ImageIO.read(getClass().getClassLoader().getResource("Pictures/Close/CloseSelected.png")), Calc.nC002, Calc.nC002)));       //Müsste nachvollziehbar sein
       bttnC.setRolloverEnabled(true);                                                                                                                                               //Selbsterklärend
       bttnC.setBorderPainted(false);                                                                                                                                               //Selbsterklärend
       bttnC.setOpaque(true);                                                                                                                                                       //Selbsterklärend
       bttnC.setVisible(true);                                                                                                                                                       //Selbsterklärend
       getContentPane().setLayout(null);                                                                                                                                           //Selbsterklärend
       getContentPane().add(bttnC);                                                                                                                                               //Selbsterklärend
       getContentPane().add(lblB);                                                                                                                                                   //Selbsterklärend
   }
}
Java:
public class Scaler {
   public static Image scale(Image imageToScaleOld, int dWidth, int dHeight) throws IOException {
        BufferedImage scaledImage = null;
        Image scaledImg = null;
        if (imageToScaleOld != null) {
           BufferedImage imageToScale = (BufferedImage) imageToScaleOld;
            scaledImage = new BufferedImage(dWidth, dHeight, imageToScale.getType());
            Graphics2D graphics2D = scaledImage.createGraphics();
            graphics2D.drawImage(imageToScale, 0, 0, dWidth, dHeight, null);
            graphics2D.dispose();
            scaledImg = scaledImage;
        }
        return scaledImg;
    }
}
Java:
public class Calc {
   public static int nMF001 = nMF001();
   public static int nMF002 = nMF002();
   public static int nMF003 = nMF003();
   public static int nMF004 = nMF004();
   public static int nC001 = nC001();
   public static int nC002 = nC002();
   private static int nMF001() {                                                               //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
       double c = 0.2224;                                                                       //Rechnet X Position des JFrames aus 
       double e = ((double)Toolkit.getDefaultToolkit().getScreenSize().getWidth())*c;           //Rechnet X Position des JFrames aus             
       int r = (int) e;                                                                       //Rechnet X Position des JFrames aus 
       return r;                                                                               //Rechnet X Position des JFrames aus 
   }                                                                                           //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
   private static int nMF002() {                                                               //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       double c = 0.1269;                                                                       //Rechnet Y Position des JFrames aus     
       double e = ((double)Toolkit.getDefaultToolkit().getScreenSize().getHeight())*c;           //Rechnet Y Position des JFrames aus 
       int r = (int) e;                                                                       //Rechnet Y Position des JFrames aus 
       return r;                                                                               //Rechnet Y Position des JFrames aus 
   }                                                                                           //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
   private static int nMF003() {                                                               //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       double c = 0.5547;                                                                       //Rechnet Breite des JFrames aus
       double e = ((double)Toolkit.getDefaultToolkit().getScreenSize().getWidth())*c;           //Rechnet Breite des JFrames aus
       int r = (int) e;                                                                       //Rechnet Breite des JFrames aus
       return r;                                                                               //Rechnet Breite des JFrames aus
   }                                                                                           //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   private static int nMF004() {                                                               //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       double c = 0.7093;                                                                       //Rechnet Höhe des JFrames aus
       double e = ((double)Toolkit.getDefaultToolkit().getScreenSize().getHeight())*c;           //Rechnet Höhe des JFrames aus
       int r = (int) e;                                                                       //Rechnet Höhe des JFrames aus
       return r;                                                                               //Rechnet Höhe des JFrames aus
   }                                                                                           //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   private static int nC001() {                                                               //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       double c = 0.965;                                                                       //Rechnet X Position des JButtons aus                                         
       double e = ((double)nMF003)*c;                                                           //Rechnet X Position des JButtons aus                                                 
       int r = (int) e;                                                                       //Rechnet X Position des JButtons aus                                         
       return r;                                                                               //Rechnet X Position des JButtons aus                                                 
   }                                                                                           //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                                             
   private static int nC002() {                                                               //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                                                                                     
       double c = 0.0487;                                                                       //Rechnet Breite & Höhe des JButtons aus                                         
       double e = ((double)nMF004)*c;                                                           //Rechnet Breite & Höhe des JButtons aus                                                             
       int r = (int) e;                                                                       //Rechnet Breite & Höhe des JButtons aus                     
       return r;                                                                               //Rechnet Breite & Höhe des JButtons aus                                     
   }                                                                                           //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~     
}
Würde mich über eine Antwort freuen! 🙂
 
Ich habe es jetzt nicht ausprobiert, wage aber zu bezweifeln, dass der Code überhaupt kompiliert. Wenn ich es richtig sehe, verwendest Du lblCX in setBounds, obwohl erst eine Zeile später deklariert wird.

Abgesehen davon: Bezeichner für Variablen, Methoden und Parameter schreibt man in Java in lowerCamelCase, für Typen in UpperCamelCase. Unterstriche in Bezeichnern sind ebenso verpönt wie die ungarische Notation. Dafür hat man lieber aussagefähige Bezeichner - z. B. nMF001 bis nMF004 bringts jetzt nicht wirklich.

Was soll der Unfug mit den ganzen static Feldern und Methoden?
 
Das Programm kompiliert nicht. Es gibt zwei Fehler:
1. In der Zeile, die mihe7 bereits genannt hat.
2. In folgender Zeile wegen dem Zeichen ganz rechts:
Java:
bttnC.setBackground(Color.GREEN);   ´
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben