Ich habe versucht ein Programm zu erstellen wo man die Koordinaten eingeben kann wo eine Linie gezeichnet werden soll und dann wenn man auf den Button "Zeichnen" klickt dort die Linien gezeichnet werden. Aktuell wird die Linie jedoch direkt auf den JFrame gezeichnet. Ich möchte das jedoch ändern und die Linien auf einen JPanel zeichnen. Ich habe versucht ein zweiten JPanel (panel2) zu erstellen und dann mit panel2.add(linie) die Linien hinzuzufügen doch leider funktioniert das nicht.. was mache ich falsch? (Wenn ich die Linien mit add(linie) direkt auf den JFrame zeichne funktioniert es wunderbar)
Java:
package test;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.Box.Filler;
class Fenster extends JFrame implements ActionListener{
JButton btn_zeichnen;
JTextField txt_x1,txt_x2,txt_y1,txt_y2;
JLabel lbl_x1,lbl_x2,lbl_x3,lbl_x4;
JPanel panel;
JPanel panel2;
MyPanel linie;
int x1,x2,y1,y2;
//Konstrukor
public Fenster(){
setTitle("Test");
setSize(800,600);
setDefaultCloseOperation(EXIT_ON_CLOSE);
panel = new JPanel();
panel2 = new JPanel();
btn_zeichnen = new JButton("Zeichnen");
btn_zeichnen.setSize(100,30);
btn_zeichnen.setLocation(300, 50);
btn_zeichnen.addActionListener(this);
txt_x1 = new JTextField();
txt_x1.setLocation(30,30);
txt_x1.setSize(100, 30);
txt_x1.setVisible(true);
txt_x2 = new JTextField();
txt_x2.setLocation(30,80);
txt_x2.setSize(100, 30);
txt_x2.setVisible(true);
txt_y1 = new JTextField();
txt_y1.setLocation(150,30);
txt_y1.setSize(100, 30);
txt_y1.setVisible(true);
txt_y2 = new JTextField();
txt_y2.setLocation(150,80);
txt_y2.setSize(100, 30);
txt_y2.setVisible(true);
setLayout(new GridLayout(2,1));
panel.setLayout(null);
add(panel);
add(panel2);
panel.add(btn_zeichnen);
panel.add(txt_x1);
panel.add(txt_x2);
panel.add(txt_y1);
panel.add(txt_y2);
}
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().equals("Zeichnen")){
x1 = Integer.valueOf(txt_x1.getText());
y1 = Integer.valueOf(txt_y1.getText());
x2 = Integer.valueOf(txt_x2.getText());
y2 = Integer.valueOf(txt_y2.getText());
linie = new MyPanel(x1, y1, x2, y2);
panel2.add(linie);
revalidate();
repaint();
}
}
}
//Hauptprogramm
public class Frame{
public static void main(String[] args){
Fenster frame = new Fenster();
frame.setVisible(true);
}
}
Java:
package test;
import java.awt.*;
import javax.swing.*;
public class MyPanel extends JPanel {
int x1,y1,x2,y2;
public MyPanel(int x1, int y1, int x2, int y2){
setLayout(null);
this.x1 = x1;
this.x2 = x2;
this.y1 = y1;
this.y2 = y2;
}
public void paint(Graphics gr){
super.paintComponents(gr);
Graphics2D g = (Graphics2D)gr;
g.setColor(Color.GREEN);
g.drawLine(x1, y1, x2, y2);
}
}
Zuletzt bearbeitet von einem Moderator: