Pour les devoirs, j'essaie de créer un "CustomButton" qui a un cadre et dans ce cadre, je dessine deux triangles, et un carré au-dessus. Il est supposé donner à l'utilisateur l'effet d'un bouton une fois qu'il est enfoncé. Donc, pour commencer, j'essaie de mettre en place les graphiques de début, en dessinant deux triangles, et un carré. Le problème que j'ai est bien que je mette mon cadre à 200, 200, et les triangles que j'ai dessinés je pense aux bonnes extrémités de ma taille de cadre, quand je cours le programme, je dois étendre ma fenêtre pour faire toute l'oeuvre, mon "CustomButton", visible. Est-ce normal? Merci.Aide avec un cadre simple et des graphiques
code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CustomButton
{
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
CustomButtonFrame frame = new CustomButtonFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
class CustomButtonFrame extends JFrame
{
// constructor for CustomButtonFrame
public CustomButtonFrame()
{
setTitle("Custom Button");
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
CustomButtonSetup buttonSetup = new CustomButtonSetup();
this.add(buttonSetup);
}
private static final int DEFAULT_WIDTH = 200;
private static final int DEFAULT_HEIGHT = 200;
}
class CustomButtonSetup extends JComponent
{
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
// first triangle coords
int x[] = new int[TRIANGLE_SIDES];
int y[] = new int[TRIANGLE_SIDES];
x[0] = 0; y[0] = 0;
x[1] = 200; y[1] = 0;
x[2] = 0; y[2] = 200;
Polygon firstTriangle = new Polygon(x, y, TRIANGLE_SIDES);
// second triangle coords
x[0] = 0; y[0] = 200;
x[1] = 200; y[1] = 200;
x[2] = 200; y[2] = 0;
Polygon secondTriangle = new Polygon(x, y, TRIANGLE_SIDES);
g2.drawPolygon(firstTriangle);
g2.setColor(Color.WHITE);
g2.fillPolygon(firstTriangle);
g2.drawPolygon(secondTriangle);
g2.setColor(Color.GRAY);
g2.fillPolygon(secondTriangle);
// draw rectangle 10 pixels off border
g2.drawRect(10, 10, 180, 180);
}
public static final int TRIANGLE_SIDES = 3;
}
Il est préférable de stocker les dimensions préférées dans une variable statique et de les retourner dans getPreferredSize(). Sinon, une nouvelle instance sera créée chaque fois que getPreferredSize() est invoqué, ce qui peut arriver très souvent selon la disposition. –
Bon point. Une meilleure solution serait probablement de faire un 'setPreferredSize()' dans le constructeur du composant. J'espère que le PO lit ceci. – aioobe