Witajcie, mam pewien problem, z którym nie mogę sobie poradzić, mianowicie:
- po naciśnięciu przycisku na panelu jest rysowane kilka figur (nie ważne jakich, nie ważne co, chodzi o sam fakt rysowania po naciśnięciu)
- interfejs graficzny składa się z dwóch elementów: panelu i przycisku (to wszystko oczywiście wsadzone w JFrame)
i mam taki problem, po naciśnięciu przycisku wszystko się rysuje, tylko button się duplikuje i wyskakuje w innym miejscu, nieco niżej...
Dlaczego się tak dzieje? Żeby nie być gołosłownym podrzucam kod:
package dom;
import java.awt.Color;
public class Tstt {
public static JFrame frame;
public static int a = 0;
public static mojP panel = new mojP();
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
try
{
Tstt window = new Tstt();
window.frame.setVisible(true);
}
catch (Exception e)
{
e.printStackTrace();
}
}
});
}
public Tstt()
{
initialize();
}
private void initialize()
{
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton btnNewButton = new JButton("New button");
btnNewButton.addMouseListener(new MouseAdapter()
{
@Override
public void mouseClicked(MouseEvent e)
{
Tstt.a = 1;
panel.repaint();
}
});
GroupLayout groupLayout = new GroupLayout(frame.getContentPane());
groupLayout.setHorizontalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addComponent(btnNewButton, GroupLayout.DEFAULT_SIZE, 434, Short.MAX_VALUE)
.addComponent(panel, GroupLayout.DEFAULT_SIZE, 434, Short.MAX_VALUE)
);
groupLayout.setVerticalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addGroup(groupLayout.createSequentialGroup()
.addComponent(btnNewButton, GroupLayout.PREFERRED_SIZE, 49, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(panel, GroupLayout.PREFERRED_SIZE, 207, GroupLayout.PREFERRED_SIZE))
);
frame.getContentPane().setLayout(groupLayout);
}
}
class mojP extends JPanel
{
Graphics g;
public void paint(Graphics g)
{
if(Tstt.a == 1)
{
Insets b = getInsets();
g.translate (b.left, b.top);
g.setColor( new Color( 20, 20, 100));
g.fillRect( 10, 10, 50, 50 );
g.setColor( Color.green );
g.fillOval( 100, 50, 20, 20 );
repaint();
}
}
}
Jeśli ktoś powie co robię nie tak, będę wdzięczny...