Gui-Zeichenprogramm

D

Dr.Java00

Gast
hallo erstmal
ich habe da ein problem!

Ich programmiere JAVA mit GUI in NetBeans IDE 6.8.
Habe ein Fenster erzeugt wo 3 Buttons drauf sind, ein Zeichenfeld, zwei jSlider (um es verschieben zu können an der X UND Y achse).
Alles lief gut.
Wenn ich auf die Buttons klicke, wird automatisch ein Stern,Dreieck und Viereck gezeichnet.
Da hatte ich die Idee noch einen Slider einzufügen, mit dem ich die Größe ändern kann, doch da hängts bei mir.
Habe keinen Plan wie das gehen soll.

Bitte um schnelle Antwort!

[JAVA=42]
package formenzeichnen;

import java.awt.Graphics;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Vector;
import javax.swing.JTable;
import javax.swing.JViewport;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableModel;



/**
*
* @author sacherik
*/
public class Fenster extends javax.swing.JFrame {

private boolean paintOn = false;
private ArrayList liste = new ArrayList();
private int screenMiddleX;
private int screenMiddleY;
private int selectedLine;
private JTable jTable;




/** Creates new form Fenster */
public Fenster() {
initComponents();
this.refreshTable();
paintOn = true;
screenMiddleX = 4+jSliderX.getX()+jSliderX.getWidth()/2;
screenMiddleY = 30+jSliderY.getY()+jSliderY.getHeight()/2;
}

private void jButtonSaveActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}

private void jSliderYStateChanged(javax.swing.event.ChangeEvent evt) {
if (!liste.isEmpty()) {
((Formen) liste.get(selectedLine)).setPosy(calculatePosY(jSliderY));
repaint();
}
}

private void jSliderXStateChanged(javax.swing.event.ChangeEvent evt) {
if (!liste.isEmpty()) {
((Formen) liste.get(selectedLine)).setPosx(calculatePosX(jSliderX));
repaint();
}
repaint();
}

private void jTableFocusGained(java.awt.event.FocusEvent evt) {
tableSelectionChanged();
setSliders((Formen) this.liste.get(selectedLine));
this.refreshTable();
}


private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
Viereck viereck = new Viereck("Viereck"+(this.liste.size()+1),
screenMiddleX,
screenMiddleY);
this.liste.add(viereck);
//this.add(viereck.getVierEck());
this.selectedLine = liste.size()-1;
this.refreshTable();
this.setSliders(viereck);
repaint();
}

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
Dreieck dreieck = new Dreieck("Dreieck"+(this.liste.size()+1),
screenMiddleX,
screenMiddleY);
this.liste.add(dreieck);
//this.add(dreieck.getDreiEck());
this.selectedLine = liste.size()-1;
this.refreshTable();
this.setSliders(dreieck);
repaint();
}

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
Stern stern = new Stern("Stern"+(this.liste.size()+1),
screenMiddleX,
screenMiddleY);
this.liste.add(stern);
//this.add(viereck.getVierEck());
this.selectedLine = liste.size()-1;
this.refreshTable();
this.setSliders(stern);
repaint();
}


/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Fenster().setVisible(true);

}
});
}

@Override
public void paint(Graphics g) {
if (paintOn) {
super.paint(g);
//tableSelectionChanged();
for(int i=0; i<this.liste.size();i++) {
Formen eck = null;
Object itNext = this.liste.get(i);
// get DbTitles-Obj from titlesData ArrayList to refresh table
String formName = (itNext).getClass().getName();
if(formName.indexOf("Viereck") != -1) {
eck = (Viereck)this.liste.get(i);
}
if(formName.indexOf("Dreieck") != -1) {
eck = (Dreieck)this.liste.get(i);
}
if(formName.indexOf("Stern") != -1) {
eck = (Stern)this.liste.get(i);
}
eck.zeichnen(g);
}
}
}

public int calculatePosX(javax.swing.JSlider s) {
return (int)(screenMiddleX+((s.getValue()-50)*0.01*s.getWidth()));
}

public int calculatePosY(javax.swing.JSlider s) {
return (int)(screenMiddleY-((s.getValue()-50)*0.01*s.getHeight()));
}

public void setSliders(Formen form) {
jSliderX.setValue(((form.getPosx()-screenMiddleX)*100/jSliderX.getWidth())+50);
jSliderY.setValue(((screenMiddleY-form.getPosy())*100/jSliderY.getHeight())+50);

}

private void refreshTable()
{
DefaultTableModel dftm = new DefaultTableModel();
String a;
a="Ebenen";
dftm.addColumn(a);

Vector v = new Vector();
v.add(a);
dftm.setColumnIdentifiers(v);

try{
Iterator it = this.liste.iterator();
while(it.hasNext())
{
Formen formenObj = null;
Object itNext = it.next();
// get DbTitles-Obj from titlesData ArrayList to refresh table
String formName = (itNext).getClass().getName();
if(formName.indexOf("Viereck") != -1) {
formenObj = (Viereck) itNext;
}
if(formName.indexOf("Dreieck") != -1) {
formenObj = (Dreieck) itNext;
}
if(formName.indexOf("Stern") != -1) {
formenObj = (Stern) itNext;
}
// create Vector for viewing in table
Vector vec = new Vector();
vec.add(formenObj.getName());
dftm.addRow(vec);
}
}
catch(Exception ex){ex.printStackTrace();}

JTable tab = new JTable(dftm);
this.jScrollPane1.setViewportView(tab);
JViewport x = this.jScrollPane1.getViewport();
jTable = (JTable) x.getComponent(0);
jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
jTable.setRowSelectionAllowed(true);
jTable.addFocusListener(new java.awt.event.FocusAdapter() {
public void focusGained(java.awt.event.FocusEvent evt) {
jTableFocusGained(evt);
}
});
ListSelectionModel selectionModel = jTable.getSelectionModel();
selectionModel.setSelectionInterval(selectedLine, selectedLine);
}

public void tableSelectionChanged() {
int line = jTable.getSelectedRow();
if(line != -1 && selectedLine != line) {
selectedLine = line;
}
}
[/code]

wenn ihr weitere klassen braucht nur schreiben

P.S: ich mache das mit Interface und Vererbung
 

Marco13

Top Contributor
hallo erstmal
P.S: ich mache das mit Interface und Vererbung

Oder auch nicht...
Code:
if(formName.indexOf("Viereck") != -1) {
    formenObj = (Viereck) itNext;
}
:autsch: (Das macht so keinen Sinn...)

Wie auch immer: Gibt es bei diesen Formen eine Möglichkeit, die Größe einzustellen? (Soe wie setPosx und setPosy) ?
 
D

Dr.Java00

Gast
wieso machts keinen sinn?
diese zeile brauche ich damit er weiß was er zeichnen soll, also erkennen

und mann kanns nur manuell eingeben, also die x und y koordinaten eingeben
aber ich will es mit einem schieberegler (slider) machen
 

Marco13

Top Contributor
Es würde ein
Code:
Formen formenObj = null;
Object itNext = it.next();
formenObj = (Formen)itNext;
reichen, oder gleich
Code:
Formen formenObj = (Formen)it.next();
und wenn die 'liste' mit Generics versehen wäre,
Code:
private List<Formen> list = new ArrayList<Formen>();
könnte man sich den cast (das "(Formen)") auch noch sparen.

Aber egal: Die Position wird doch schon mit einem Slider verändert, oder nicht?
 
D

Dr.Java00

Gast
jap die position wird schon verändert
hab 2 schieberegler angebracht
mit denen ich die position auf dem zeichenfeld verändern kann (also verschieben)

und ich will jedoch einen schieberegler dazu machen, mit dem ich die formen (zB viereck)
größer und kleiner machen kann
 
D

Dr.Java00

Gast
also um ehrlich zu sein, ich bin kein großer programmierer
mache das eigentlich manchmal aus langeweile

also hier ist mal die klasse wo ich die werte fürs viereck programmiert habe

[JAVA=42]
package formenzeichnen;

import java.awt.Graphics;
import javax.swing.JComponent;

/**
*
* @author sacherik
*/
public class ViereckForm extends JComponent {

public ViereckForm() {
this.setVisible(true);
repaint();
}

public void drawRect(Graphics g, int posX, int posY) {
g.drawRect(posX, posY, 100 , 100);
}
}
[/code]
 
D

Dr.Java00

Gast
schau ich schick dir mal das programm

[JAVA=42]
package formenzeichnen;

import java.awt.Graphics;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Vector;
import javax.swing.JTable;
import javax.swing.JViewport;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableModel;



/**
*
* @author
*/
public class Fenster extends javax.swing.JFrame {

private boolean paintOn = false;
private ArrayList liste = new ArrayList();
private int screenMiddleX;
private int screenMiddleY;
private int selectedLine;
private JTable jTable;




/** Creates new form Fenster */
public Fenster() {
initComponents();
this.refreshTable();
paintOn = true;
screenMiddleX = 4+jSliderX.getX()+jSliderX.getWidth()/2;
screenMiddleY = 30+jSliderY.getY()+jSliderY.getHeight()/2;
}

private void jButtonSaveActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}

private void jSliderYStateChanged(javax.swing.event.ChangeEvent evt) {
if (!liste.isEmpty()) {
((Formen) liste.get(selectedLine)).setPosy(calculatePosY(jSliderY));
repaint();
}
}

private void jSliderXStateChanged(javax.swing.event.ChangeEvent evt) {
if (!liste.isEmpty()) {
((Formen) liste.get(selectedLine)).setPosx(calculatePosX(jSliderX));
repaint();
}
repaint();
}

private void jTableFocusGained(java.awt.event.FocusEvent evt) {
tableSelectionChanged();
setSliders((Formen) this.liste.get(selectedLine));
this.refreshTable();
}


private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
Viereck viereck = new Viereck("Viereck"+(this.liste.size()+1),
screenMiddleX,
screenMiddleY);
this.liste.add(viereck);
//this.add(viereck.getVierEck());
this.selectedLine = liste.size()-1;
this.refreshTable();
this.setSliders(viereck);
repaint();
}

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
Dreieck dreieck = new Dreieck("Dreieck"+(this.liste.size()+1),
screenMiddleX,
screenMiddleY);
this.liste.add(dreieck);
//this.add(dreieck.getDreiEck());
this.selectedLine = liste.size()-1;
this.refreshTable();
this.setSliders(dreieck);
repaint();
}

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
Stern stern = new Stern("Stern"+(this.liste.size()+1),
screenMiddleX,
screenMiddleY);
this.liste.add(stern);
//this.add(viereck.getVierEck());
this.selectedLine = liste.size()-1;
this.refreshTable();
this.setSliders(stern);
repaint();
}


/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Fenster().setVisible(true);

}
});
}

@Override
public void paint(Graphics g) {
if (paintOn) {
super.paint(g);
//tableSelectionChanged();
for(int i=0; i<this.liste.size();i++) {
Formen eck = null;
Object itNext = this.liste.get(i);
// get DbTitles-Obj from titlesData ArrayList to refresh table
String formName = (itNext).getClass().getName();
if(formName.indexOf("Viereck") != -1) {
eck = (Viereck)this.liste.get(i);
}
if(formName.indexOf("Dreieck") != -1) {
eck = (Dreieck)this.liste.get(i);
}
if(formName.indexOf("Stern") != -1) {
eck = (Stern)this.liste.get(i);
}
eck.zeichnen(g);
}
}
}

public int calculatePosX(javax.swing.JSlider s) {
return (int)(screenMiddleX+((s.getValue()-50)*0.01*s.getWidth()));
}

public int calculatePosY(javax.swing.JSlider s) {
return (int)(screenMiddleY-((s.getValue()-50)*0.01*s.getHeight()));
}

public void setSliders(Formen form) {
jSliderX.setValue(((form.getPosx()-screenMiddleX)*100/jSliderX.getWidth())+50);
jSliderY.setValue(((screenMiddleY-form.getPosy())*100/jSliderY.getHeight())+50);

}

private void refreshTable()
{
DefaultTableModel dftm = new DefaultTableModel();
String a;
a="Ebenen";
dftm.addColumn(a);

Vector v = new Vector();
v.add(a);
dftm.setColumnIdentifiers(v);

try{
Iterator it = this.liste.iterator();
while(it.hasNext())
{
Formen formenObj = null;
Object itNext = it.next();
// get DbTitles-Obj from titlesData ArrayList to refresh table
String formName = (itNext).getClass().getName();
if(formName.indexOf("Viereck") != -1) {
formenObj = (Viereck) itNext;
}
if(formName.indexOf("Dreieck") != -1) {
formenObj = (Dreieck) itNext;
}
if(formName.indexOf("Stern") != -1) {
formenObj = (Stern) itNext;
}
// create Vector for viewing in table
Vector vec = new Vector();
vec.add(formenObj.getName());
dftm.addRow(vec);
}
}
catch(Exception ex){ex.printStackTrace();}

JTable tab = new JTable(dftm);
this.jScrollPane1.setViewportView(tab);
JViewport x = this.jScrollPane1.getViewport();
jTable = (JTable) x.getComponent(0);
jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
jTable.setRowSelectionAllowed(true);
jTable.addFocusListener(new java.awt.event.FocusAdapter() {
public void focusGained(java.awt.event.FocusEvent evt) {
jTableFocusGained(evt);
}
});
ListSelectionModel selectionModel = jTable.getSelectionModel();
selectionModel.setSelectionInterval(selectedLine, selectedLine);
}

public void tableSelectionChanged() {
int line = jTable.getSelectedRow();
if(line != -1 && selectedLine != line) {
selectedLine = line;
}
}


[/code]

[JAVA=42]
package formenzeichnen;

/**
*
* @author
*/
public abstract class Formen implements FormenZeichnen {
private String name;
private int posx;
private int posy;
private int form;


/**
* @return the posx
*/
public int getPosx() {
return posx;
}

/**
* @param posx the posx to set
*/
public void setPosx(int posx) {
this.posx = posx;
}

/**
* @return the posy
*/
public int getPosy() {
return posy;
}

/**
* @param posy the posy to set
*/
public void setPosy(int posy) {
this.posy = posy;
}

/**
* @return the form
*/
public int getForm() {
return form;
}

/**
* @param form the form to set
*/
public void setForm(int form) {
this.form = form;
}

/**
* @return the name
*/
public String getName() {
return name;
}

/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}

}

[/code]

[JAVA=42]

package formenzeichnen;

import java.awt.Graphics;

/**
*
* @author
*/
public interface FormenZeichnen {
public void zeichnen(Graphics g);
}
[/code]

[JAVA=42]
package formenzeichnen;

import java.awt.Graphics;

/**
*
* @author
*/
public class Viereck extends Formen {
private ViereckForm vierEck = new ViereckForm();

public Viereck() {

}

public Viereck(String name, int x, int y) {
this.setName(name);
this.setPosx(x);
this.setPosy(y);
}

public void zeichnen(Graphics g)
{
getVierEck().drawRect(g, this.getPosx(), this.getPosy());
}

/**
* @return the vierEck
*/
public ViereckForm getVierEck() {
return vierEck;
}

/**
* @param vierEck the vierEck to set
*/
public void setVierEck(ViereckForm vierEck) {
this.vierEck = vierEck;
}

}
[/code]

[JAVA=42]
package formenzeichnen;

import java.awt.Graphics;
import javax.swing.JComponent;

/**
*
* @author
*/
public class ViereckForm extends JComponent {

public ViereckForm() {
this.setVisible(true);
repaint();
}

public void drawRect(Graphics g, int posX, int posY) {
g.drawRect(posX, posY, 100 , 100);
}
}
[/code]
 
D

Dr.Java00

Gast
ich weiß was ich machen muss, kann jedoch nicht umsetzen
könntest du mir den programmcode ned einfach schicken?

würde mir sehr helfen
 

Marco13

Top Contributor
Ein paar Schnipsel
Code:
public abstract class Formen implements FormenZeichnen {
...
        private int size;
        public void setSize(int size) { this.size = size; }
        protected int getSize() { return size; }


public class Viereck extends Formen {
... 
    public void zeichnen(Graphics g)
    {
        getVierEck().drawRect(g, this.getPosx(), this.getPosy(), this.getSize(), this.getSize());
    }



public class ViereckForm extends JComponent {
   ....
    public void drawRect(Graphics g, int posX, int posY, int w, int h) {
        g.drawRect(posX, posY, w, h);
    }

Die Struktur ist halt nicht so schön, aber ... egal...
 
D

Dr.Java00

Gast
okay habs jetzt mal eingefügt
und ich muss ja noch im fenster den slider programmieren

könntest du mir das mal zeigen?
 

Ähnliche Java Themen


Oben