Om du är helt ny på Java så tycker jag att du ska börja med consol program och när du har lärt dig grunderna i Java så ska du gå över till fönster programering.
*suck* jag måste va dummare än en kokosboll för tillfället. Får det iaf inte att fungera. Har anropat paint, gick inte, anropade repaint, gick inte det heller :( Förstår inte varför inte linjen ritas ut...
Tack, det vore jättesnällt. Det är säkert hur enkelt som helst, bara att jag inte kan se det :) Man blir lite stirrig efter att ha testat samma sak i 6 timmar ungefär ;)
Nu är inte anropet till paint (eller repaint eller vad det nu ska va) med i koden...
[BLUE]
import java.awt.*;
//import java.awt.event.*;
public class Logik
{
private Frame f;
private Button skapa, svara, skicka_taemot,ta_bort;
//private Lyss ly;
private Panel p1,p2;
private Graphics gr;
public Logik()
{
//ly=new Lyss(this);
f=new Frame("Mailprogrammet Mail @ It");
//f.addWindowListener(ly);
skapa=new Button ("Skapa");
//skapa.addActionListener(ly);
svara=new Button ("Svara");
//svara.addActionListener(ly);
skicka_taemot=new Button ("Skicka/Ta emot");
//skicka_taemot.addActionListener(ly);
ta_bort=new Button ("Ta bort");
//ta_bort.addActionListener(ly);
p1=new Panel();
//p2=new Panel();
p1.add(skapa);
p1.add(svara);
p1.add(skicka_taemot);
p1.add(ta_bort);
f.setBackground(Color.yellow);
f.setLayout(new FlowLayout());
f.add(skapa);
f.add(svara);
f.add(skicka_taemot);
f.add(ta_bort);
f.setSize(600,550);
f.setLocation(100,100);
f.setVisible(true);
}
public void paint(Graphics gr) // vet inte om gr behövs
{
gr.setColor(Color.black);
gr.drawLine(10,10,100,100);
}
public static void main(String[] args)
{
new Logik();
}
}
Jag tror du hittar svaret på problemet i min första post :)
import java.awt.*;
public class Logik extends Frame
{
//private Frame f;
private Button skapa, svara, skicka_taemot, ta_bort;
//private Lyss ly;
private Panel p1, p2;
private Graphics gr;
public Logik()
{
//ly=new Lyss(this);
super("Mailprogrammet Mail @ It");
//f=new Frame("Mailprogrammet Mail @ It");
//f.addWindowListener(ly);
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent e) {
setVisible(false);
dispose();
System.exit(0);
}
});
skapa= new Button("Skapa");
//skapa.addActionListener(ly);
svara= new Button("Svara");
//svara.addActionListener(ly);
skicka_taemot= new Button("Skicka/Ta emot");
//skicka_taemot.addActionListener(ly);
ta_bort= new Button("Ta bort");
//ta_bort.addActionListener(ly);
p1=new Panel();
//p2=new Panel();
p1.add(skapa);
p1.add(svara);
p1.add(skicka_taemot);
p1.add(ta_bort);
setBackground(Color.yellow);
setLayout(new FlowLayout());
add(skapa);
add(svara);
add(skicka_taemot);
add(ta_bort);
setSize(600, 550);
setLocation(100, 100);
setVisible(true);
}
public void paint(Graphics gr) // vet inte om gr behövs
{
super(gr);
gr.setColor(Color.black);
gr.drawLine(10, 10, 100, 100);
gr.drawString("This is working now!",100,100);
}
public static void main(String[] args)
{
new Logik();
}
}
Ändringar som jag har gjort:
- Logik ärver nu av Frame (annars kan du inte överlagra en metod)
- Allt som du förut la på f (f.addXXX) lägger du nu direkt med addXXX eftersom Logik nu är en frame så behöver du inte skapa en ny frame.
- Eftersom det är ett arv så anroppar du super() först i din konstruktor för att sätta titeln på fönstert och initiera fönstret.
- Jag la även till en window exit funktion så att man inte behöver trycka Ctrl-Alt-Delete för att avsluta programet.
Det är det som jag har gjort och nu anroppas paint som den ska, den anroppar även den överlagrade funktionen först.
Tack så hemskt mycket för hjälpen!!!! :)
Fast en sak hänger jag inte riktigt med på...eller jo jag hänger
med på vad som händer och så, men jag förstår inte varför det
hela plötsligt löste sig bara för att man ärver frame istället för att
göra f=new frame, för det är ju nästan samma sak, eller hur?!
Lyssnarna, som är nästan enklare, tänkte jag ta senare...men tack för att du fixade "stäng" åt mig ändå ;)
Så här är det: Du vill att metoden paint(Graphics gr) ska se ut på ett visst sätt. I klassen Frame gör paintmetoden ingenting har jag för mig, den gör i alla fall inte det du vill att den ska göra. Så om du skapar en f = new Frame() så har din f Frames paintmetod. Att du i Logik definierar om paint hjälper inte ett dugg. När metoden paint anropas kommer f's paintmetod=Frames paintmetod att användas. Logiks paintmetod anropas aldrig.
Om du däremot låter Logik vara en subklass till Frame och definierar en paintmetod i Logik, så skriver den över (ersätter) superklassens metod med samma signatur (signatur = namn och inparametrar). När paintmetoden nu körs, kommer din paintmetod att användas i stället för den ursprungliga. Skillnaden är alltså att Logik nu är av typen Frame.
Ok, då förstår jag lite bättre :)
Fast problemet är nu att den inte känner igen super(gr); - den måste definieras först i konstruktorn. Men gör jag det, då känner den inte igen super(mailprogrammet... ); :(
men hur fungerar JSplitPane? Har inte hållt på med den förut...är det samma princip som med paint, att man måste ärva JFrame osv? eller är det bara att lägga in den som allt annat, knappar osv? Jag har testat med båda, men jag får det inte att fungera...tänkte bara så att jag vet vilken av dom som är rätt så kan jag jobba utifrån det sen :)