Hi!
Folgendes Problem:
Ich habe mir eigene Button gebaut mit HIntergrundbild. Sehen auch ganz gut aus und auf meinem MAc funzen sie auch ohne Probleme aber auf WIndows siehts furchtbar aus.
1. Wenn man drüberfährt werden sie dunkler und bleiben auch so
2. Wenn man über ein label oder button drüberfährt und danach über einen anderen, wird das image des vorangehenden leicht in den hintergrund des anderen Button gezeichnet. Aber seht selbst :
Hier mal der Code zum Button:
und wie ich die Button einbinde:
Ein ähnliches Problem hab ich auch mit einer Custom JScrollBar, aber wenn das gelöst werden sollte weiss ich glaub ich auch wie das andere funzt
Ich hab ehrlich gesagt keine Idee was ich falsch mach. Liegts an der Paint Mehtode oder am LAyout?
Bei meinem Mac tritt das Problem gar nicht auf, nur das mit der ScrollPAne...
Ich hoffe ihr könnt mir helfen. Muss übermorgen abgeben und bin ein wenig am verzweifeln.
€dit: hab den button jetzt au setRollOverEnabled(false) gesetzt, jetzt passierts nur noch wenn man ihn klickt, selbes ergebnis aber
Grüße Peter
Folgendes Problem:
Ich habe mir eigene Button gebaut mit HIntergrundbild. Sehen auch ganz gut aus und auf meinem MAc funzen sie auch ohne Probleme aber auf WIndows siehts furchtbar aus.
1. Wenn man drüberfährt werden sie dunkler und bleiben auch so
2. Wenn man über ein label oder button drüberfährt und danach über einen anderen, wird das image des vorangehenden leicht in den hintergrund des anderen Button gezeichnet. Aber seht selbst :
Hier mal der Code zum Button:
Java:
package reversi;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.Stroke;
import javax.swing.BorderFactory;
import javax.swing.ButtonModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import sun.java2d.loops.DrawRect;
public class MyButton extends JButton {
private String text;
private Image startImg;
private Image pressedImg;
private Image enabledImg;
public MyButton(String text) {
super(text);
this.text = text;
this.startImg = new ImageIcon(this.getClass().getClassLoader()
.getResource("StartButton.png")).getImage();
this.pressedImg = new ImageIcon(this.getClass().getClassLoader()
.getResource("PressedButton.png")).getImage();
this.enabledImg = new ImageIcon(this.getClass().getClassLoader()
.getResource("PressedButton.png")).getImage();
}
protected void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
super.paintComponents(g2d);
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
int h = this.getHeight();
int w = this.getWidth();
ButtonModel model = getModel();
// draw Image
if (model.isEnabled()) {
g2d.drawImage(startImg, 0, 0, w, h, MyButton.this);
} else {
// draw helleren button.... tbd
// g2d.drawImage(enabledImg, 0, 0, w, h, MyButton.this);
}
if (model.isPressed()) {
g2d.drawImage(pressedImg, 0, 0, w, h, MyButton.this);
}
// if (model.isRollover()) {
// g2d.drawImage(startImg, 0, 0, w, h, MyButton.this);
// }
Font font = new Font("label", Font.BOLD, w / 10);
g2d.setColor(new Color(249, 243, 222));
g2d.setFont(font);
int textSize = g2d.getFontMetrics().stringWidth(text);
int posX = (w - textSize) / 2;
int posY = (int) (h / 1.5);
g2d.drawString(this.text, posX, posY);
}
}
und wie ich die Button einbinde:
Java:
startPanel = new BackgroundPanel(this.background);
startPanel.setLayout(gridBagLayout);
GridBagConstraints c = new GridBagConstraints();
createAvatars();
avaLabelList = createAvatarList();
nextAvaButton = new JButton(new ImageIcon(blackArrowRight));
nextAvaButton.setPreferredSize(avaButtonSize);
nextAvaButton.setOpaque(false);
nextAvaButton.setContentAreaFilled(false);
nextAvaButton.setBorderPainted(false);
nextAvaButton.setPressedIcon(new ImageIcon(greenArrowRight));
prevAvaButton = new JButton(new ImageIcon(blackArrowLeft));
prevAvaButton.setPreferredSize(avaButtonSize);
prevAvaButton.setOpaque(false);
prevAvaButton.setContentAreaFilled(false);
prevAvaButton.setBorderPainted(false);
prevAvaButton.setPressedIcon(new ImageIcon(greenArrowLeft));
// Buttons for MenuHandling
offLineButton = new MyButton("OFFLINE");
offLineButton.setPreferredSize(buttonSize);
onLineButton = new MyButton("ONLINE");
onLineButton.setPreferredSize(buttonSize);
quitButton = new MyButton("QUIT");
quitButton.setPreferredSize(buttonSize);
// Add Avatars
c.gridx = 0;
c.gridy = 0;
c.insets = new Insets(0, 20, 20, 20);
startPanel.add(prevAvaButton, c);
c.gridx = 1;
c.gridy = 0;
startPanel.add(avaLabel0, c);
startPanel.add(avaLabel1, c);
startPanel.add(avaLabel2, c);
startPanel.add(avaLabel3, c);
startPanel.add(avaLabel4, c);
c.gridx = 2;
c.gridy = 0;
startPanel.add(nextAvaButton, c);
// BUTTONS
c.insets = new Insets(20, 0, 0, 0);
c.gridx = 1;
c.gridy = 1;
startPanel.add(offLineButton, c);
c.gridx = 1;
c.gridy = 2;
startPanel.add(onLineButton, c);
c.gridx = 1;
c.gridy = 3;
startPanel.add(quitButton, c);
Ein ähnliches Problem hab ich auch mit einer Custom JScrollBar, aber wenn das gelöst werden sollte weiss ich glaub ich auch wie das andere funzt
Ich hab ehrlich gesagt keine Idee was ich falsch mach. Liegts an der Paint Mehtode oder am LAyout?
Bei meinem Mac tritt das Problem gar nicht auf, nur das mit der ScrollPAne...
Ich hoffe ihr könnt mir helfen. Muss übermorgen abgeben und bin ein wenig am verzweifeln.
€dit: hab den button jetzt au setRollOverEnabled(false) gesetzt, jetzt passierts nur noch wenn man ihn klickt, selbes ergebnis aber
Grüße Peter
Zuletzt bearbeitet: