import java.awt.AlphaComposite;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JColorChooser;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.LookAndFeel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.JLabel;
import java.awt.Color;
import java.awt.Font;
import javax.swing.JComboBox;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JTextField;
import java.awt.SystemColor;
import java.util.ArrayList;
import de.muntjak.tinylookandfeel.TinyLookAndFeel;
import javax.swing.JButton;
/**
* @author GUI-Programmer
* @version 09.11.2011 15:15
*/
public class View extends JPanel {
private Controller controller;
protected JPanel pnlControlls;
protected JPanel pnlDrawingarea;
protected JLabel lblFigur;
protected JComboBox cmbobxFigur;
protected JLabel lblFarbe;
protected JComboBox cmbobxFarbe;
protected String figurenbezeichnung;
protected boolean figurAusgfuellt;
protected Color figurenfarbe;
protected Dimension figurengroesse;
protected JLabel lblGroesse;
protected JTextField txtfldBreite;
protected JTextField txtfldHoehe;
protected JLabel lblMal;
protected JLabel lblPx;
protected JButton btnLoeschen;
protected JButton btnSpeichern;
protected ArrayList<Figur> figurenliste;
protected JLabel lblFuellung;
protected JComboBox cmbobxFuellung;
public View() {
controller = new Controller(this);
figurenbezeichnung = "Rechteck";
figurAusgfuellt = true;
figurenfarbe = Color.RED;
figurengroesse = new Dimension(50, 50);
figurenliste = new ArrayList<Figur>();
try {
UIManager.setLookAndFeel(new TinyLookAndFeel());
SwingUtilities.updateComponentTreeUI(this);
}
catch(Exception ex) { }
setPreferredSize(new Dimension(1000, 600));
setBackground(Color.WHITE);
setLayout(new BorderLayout(0, 0));
pnlControlls = new JPanel();
pnlControlls.setBackground(SystemColor.activeCaption);
pnlControlls.setPreferredSize(new Dimension(150, 600));
add(pnlControlls, BorderLayout.EAST);
lblFigur = new JLabel("Figur:");
lblFigur.setFont(new Font("Tahoma", Font.BOLD, 14));
lblFigur.setForeground(Color.RED);
cmbobxFigur = new JComboBox();
cmbobxFigur.setModel(new DefaultComboBoxModel(new String[] {"Rechteck", "Kreis"}));
cmbobxFigur.addActionListener(controller);
lblFarbe = new JLabel("Farbe:");
lblFarbe.setForeground(Color.RED);
lblFarbe.setFont(new Font("Tahoma", Font.BOLD, 14));
cmbobxFarbe = new JComboBox();
cmbobxFarbe.setModel(new DefaultComboBoxModel(new String[] {"rot", "grün", "gelb", "blau", "Andere..."}));
cmbobxFarbe.addActionListener(controller);
lblGroesse = new JLabel("Gr\u00F6\u00DFe:");
lblGroesse.setForeground(Color.RED);
lblGroesse.setFont(new Font("Tahoma", Font.BOLD, 14));
txtfldBreite = new JTextField();
txtfldBreite.setText("50");
txtfldBreite.setColumns(10);
txtfldBreite.addKeyListener(controller);
txtfldHoehe = new JTextField();
txtfldHoehe.setText("50");
txtfldHoehe.setColumns(10);
txtfldHoehe.addKeyListener(controller);
lblMal = new JLabel("x");
lblPx = new JLabel("px");
btnLoeschen = new JButton("L\u00F6schen");
btnLoeschen.setFont(new Font("Tahoma", Font.BOLD, 12));
btnLoeschen.addActionListener(controller);
btnSpeichern = new JButton("Speichern");
btnSpeichern.setFont(new Font("Tahoma", Font.BOLD, 12));
btnSpeichern.addActionListener(controller);
lblFuellung = new JLabel("Füllung:");
lblFuellung.setForeground(Color.RED);
lblFuellung.setFont(new Font("Tahoma", Font.BOLD, 14));
cmbobxFuellung = new JComboBox();
cmbobxFuellung.setModel(new DefaultComboBoxModel(new String[] {"ausgefüllt", "leer"}));
cmbobxFuellung.addActionListener(controller);
GroupLayout gl_pnlControlls = new GroupLayout(pnlControlls);
gl_pnlControlls.setHorizontalGroup(
gl_pnlControlls.createParallelGroup(Alignment.LEADING)
.addGroup(gl_pnlControlls.createSequentialGroup()
.addGap(12)
.addComponent(lblFigur, GroupLayout.PREFERRED_SIZE, 55, GroupLayout.PREFERRED_SIZE))
.addGroup(gl_pnlControlls.createSequentialGroup()
.addGap(12)
.addComponent(cmbobxFigur, GroupLayout.PREFERRED_SIZE, 121, GroupLayout.PREFERRED_SIZE))
.addGroup(gl_pnlControlls.createSequentialGroup()
.addGap(12)
.addComponent(lblFarbe, GroupLayout.PREFERRED_SIZE, 55, GroupLayout.PREFERRED_SIZE))
.addGroup(gl_pnlControlls.createSequentialGroup()
.addGap(12)
.addComponent(cmbobxFarbe, GroupLayout.PREFERRED_SIZE, 121, GroupLayout.PREFERRED_SIZE))
.addGroup(gl_pnlControlls.createSequentialGroup()
.addGap(12)
.addComponent(lblGroesse, GroupLayout.PREFERRED_SIZE, 55, GroupLayout.PREFERRED_SIZE))
.addGroup(gl_pnlControlls.createSequentialGroup()
.addGap(12)
.addComponent(txtfldBreite, GroupLayout.PREFERRED_SIZE, 43, GroupLayout.PREFERRED_SIZE)
.addGap(5)
.addComponent(lblMal)
.addGap(6)
.addComponent(txtfldHoehe, GroupLayout.PREFERRED_SIZE, 44, GroupLayout.PREFERRED_SIZE)
.addGap(5)
.addComponent(lblPx))
.addGroup(gl_pnlControlls.createSequentialGroup()
.addContainerGap(31, Short.MAX_VALUE)
.addComponent(btnSpeichern)
.addGap(31))
.addGroup(gl_pnlControlls.createSequentialGroup()
.addContainerGap(36, Short.MAX_VALUE)
.addComponent(btnLoeschen)
.addGap(36))
.addGroup(gl_pnlControlls.createSequentialGroup()
.addContainerGap()
.addComponent(lblFuellung, GroupLayout.PREFERRED_SIZE, 55, GroupLayout.PREFERRED_SIZE)
.addContainerGap(83, Short.MAX_VALUE))
.addGroup(gl_pnlControlls.createSequentialGroup()
.addContainerGap()
.addComponent(cmbobxFuellung, GroupLayout.PREFERRED_SIZE, 121, GroupLayout.PREFERRED_SIZE)
.addContainerGap(17, Short.MAX_VALUE))
);
gl_pnlControlls.setVerticalGroup(
gl_pnlControlls.createParallelGroup(Alignment.LEADING)
.addGroup(gl_pnlControlls.createSequentialGroup()
.addGap(12)
.addComponent(lblFigur)
.addGap(6)
.addComponent(cmbobxFigur, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addGap(26)
.addComponent(lblFarbe)
.addGap(6)
.addComponent(cmbobxFarbe, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addGap(26)
.addComponent(lblGroesse)
.addGap(6)
.addGroup(gl_pnlControlls.createParallelGroup(Alignment.LEADING)
.addComponent(txtfldBreite, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addGroup(gl_pnlControlls.createSequentialGroup()
.addGap(2)
.addComponent(lblMal))
.addComponent(txtfldHoehe, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addGroup(gl_pnlControlls.createSequentialGroup()
.addGap(2)
.addComponent(lblPx)))
.addGap(27)
.addComponent(lblFuellung, GroupLayout.PREFERRED_SIZE, 17, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(cmbobxFuellung, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(ComponentPlacement.RELATED, 269, Short.MAX_VALUE)
.addComponent(btnSpeichern)
.addGap(13)
.addComponent(btnLoeschen)
.addGap(11))
);
pnlControlls.setLayout(gl_pnlControlls);
pnlDrawingarea = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g.create();
g2d.setComposite(AlphaComposite.SrcOver);
for(Figur figur : figurenliste) {
g2d.setColor(figur.getColor());
if(figur.getDiscription().equals("Rechteck")) {
if(figur.getFill()) g2d.fillRect(figur.getX(), figur.getY(), figur.getWidth(), figur.getHeight());
else g2d.drawRect(figur.getX(), figur.getY(), figur.getWidth(), figur.getHeight());
}
if(figur.getDiscription().equals("Kreis")) {
if(figur.getFill()) g2d.fillOval(figur.getX(), figur.getY(), figur.getWidth(), figur.getHeight());
else g2d.drawOval(figur.getX(), figur.getY(), figur.getWidth(), figur.getHeight());
}
}
g2d.dispose();
}
};
pnlDrawingarea.addMouseListener(controller);
add(pnlDrawingarea, BorderLayout.CENTER);
}
private static void createFrame() {
JFrame f = new JFrame("Figuren Zeichner");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setContentPane(new View());
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
createFrame();
}
});
}
protected void showColorChooser() {
JPanel content = new JPanel();
content.setPreferredSize(new Dimension(650, 500));
content.setLayout(new BorderLayout(0, 0));
LookAndFeel lafOld = UIManager.getLookAndFeel();
try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); }
catch(Exception ignore) { }
final JColorChooser colorchooser = new JColorChooser();
colorchooser.setBackground(SystemColor.activeCaption);
content.add(colorchooser, BorderLayout.CENTER);
try { UIManager.setLookAndFeel(lafOld); }
catch(Exception ignore) { }
JPanel pnlButton = new JPanel();
pnlButton.setPreferredSize(new Dimension(650, 60));
pnlButton.setBackground(SystemColor.activeCaption);
pnlButton.setLayout(new GridBagLayout());
final JDialog dialog = new JDialog();
JButton btnOK = new JButton("OK");
btnOK.setPreferredSize(new Dimension(90, 30));
btnOK.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
figurenfarbe = colorchooser.getColor();
dialog.dispose();
}
});
pnlButton.add(btnOK);
content.add(pnlButton, BorderLayout.SOUTH);
dialog.setTitle("Farbe wählen");
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setModal(true);
dialog.setContentPane(content);
dialog.pack();
dialog.setLocationRelativeTo(this);
dialog.setVisible(true);
}
}