wie kann ich einen JButton auf einem Bild?
Ich bin versucht zu reparieren, ein JFrame, wo ein hintergrund-Bild und auf das Bild, JButtons, die einige Befehle. Ich versuche, es zu tun, ohne layout, da will ich kleine Knöpfe in einigen bestimmten Orten auf dem JFrame, aber jedes mal, wenn ich es mache, das Bild im hintergrund nach vorne kommt oder der JFrame hat Größe gleich der JFrame-Größe. Mit dem folgenden code, der JButton hat die gleiche Größe JFrame. Ich habe versucht, ändern Sie die Größe und die Lage der JButton aber nichts. Können Sie mir bitte helfen?
hier ist der code
public final class Test extends JComponent
{
private Image background;
private JFrame frame;
private Dimension dimension;
public Test()
{
dimension = new Dimension(15, 15);
frame = new JFrame("Iphone");
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(this);
frame.setBounds(641, 0, 344, 655);
frame.setVisible(true);
test = displayButton("tigka");
frame.getContentPane().add(test);
}
public void update(Graphics g)
{
paint(g);
}
public void paintComponent(Graphics g)
{
super.paintComponents(g);
g.drawImage(background, 0, 25, null); //draw background
//label();
test = displayButton("test");
}
public JButton displayButton(String name)
{
JButton Schaltfläche = new JButton(name);
- Taste.setSize(100, 100);
- Taste.setPreferredSize(dimension);
zurück Schaltfläche;
}
InformationsquelleAutor Eristikos | 2011-05-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie ändern die
content pane
um einen hintergrund für IhrFrame
.Ausgabe:
falsch: (vielleicht ein Schreibfehler), die super-Methode aufrufen, wird paintComponent statt paintComponents
Typo, korrigiert! Danke!
und jetzt kehren Sie die Reihenfolge der Anrufe wieder 😉
wenn Sie es ändern, um die paintComponent (die ich für richtig halte), dann sollte es als erste zu tun, die Standard-Bemalung, die Sie möchten, um zu zeichnen Ihr Bild. Testen Sie es selbst.
InformationsquelleAutor dacwe
Haben Sie versucht, mit einem JLabel mit HTML im label? So etwas wie dieses:
dann auf Ihre Beschriftung, die Sie hinzufügen können Ihren button?
+1 @Liv interessante Lösung.
-1 für die Verwendung von html -, wo nicht benötigt ... erstellen, und legen Sie ein ImageIcon statt. Plus mit einem JLabel an alle, ist keine gute Idee: die Voraussetzung ist, um eine hintergrund unter der normalen Komponenten, die Hinzugefügt werden ...
InformationsquelleAutor Liv
Sollten Sie tauschen die zwei Zeilen:
So sollte es sein, diese Reihenfolge:
Beachten Sie außerdem, dass die Inhalte des Bereichs Standard-layout ist BorderLayout. So würden Sie legen Sie das layout Ihrer Inhalte Bereich auf null explizit.
Es gibt keinen Unterschied in meinem post, nur deinen code mit Kommentaren und dem Hinweis, um Sie zu tauschen. 🙂
berühren Sie niemals awt-painting Methoden in der Swing-JComponents 😉 So ist es eine -1, außer für hilfreich, dass es komplett verwirrt mich - denn dem Aufruf von super.paintComponent bevor benutzerdefinierte Farbe code ist die Reihenfolge zu implementieren (sonst, wird die benutzerdefinierte Farbe gestrichen werden mit dem hintergrund für die undurchsichtige Bauteile)
Ja, das wäre die richtige Reihenfolge, aber er rief
super.paintComponents
nichtsuper.paintComponent
. Außer, dass du rechts auf den Aufruf nicht, dass die Methode manuell, sondern BerufungpaintComponent
(nicht erkennen, dass als eine mögliche Tippfehler 🙂 ).InformationsquelleAutor Thomas
InformationsquelleAutor NIKHIL UPADHYAY