Gå til innhold

Hjelp med grafisk javakalender


Anbefalte innlegg

Har en oppgave hvor jeg skal lage en grafisk kalender. Jeg kan det å gjøre det i "consol style" siden det er et eksempel fra boka vår(KåreJava, s105).

 

Men jeg får det ikke til grafisk. Så oppgaven er enkel, jeg skal lage en grafisk kalender og trenger litt hjelp. Jeg sitter fast ved at jeg ikke vet hvordan jeg skal få generert frem en kalender...

Endret av South_Bridge
Lenke til kommentar
Videoannonse
Annonse
Har en oppgave hvor jeg skal lage en grafisk kalender. Jeg kan det å gjøre det i "consol style" siden det er et eksempel fra boka vår(KåreJava, s105).

 

Men jeg får det ikke til grafisk. Så oppgaven er enkel, jeg skal lage en grafisk kalender og trenger litt hjelp. Jeg sitter fast ved at jeg ikke vet hvordan jeg skal få generert frem en kalender...

7868325[/snapback]

 

Du får det ikke til grafisk? Hva har du gjort til nå da?

Lenke til kommentar
Tror du må komme med noen konkrete spørsmål...

7869176[/snapback]

 

 

Jeg holder faktisk på med akkurat samme oppgaven hehe :)

 

Har vel forsåvidt samme problem stillingen. Hvordan får jeg "tegnet" en kalender på et panel i en frame? Jeg kan vise koden jeg har så langt:

 

 

import java.awt.Button;
import java.util.Calendar;
import java.util.GregorianCalendar;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class Program {



 public static void main(String[] args) {
 
 
 
   JPanel pmonth = new JPanel();
 
   pmonth.add(new JLabel("År:"));
   pmonth.add( new JTextField(5) );
   pmonth.add(new JLabel("Måned:"));
   pmonth.add( new JTextField(10) );
   Button knapp=new Button("Vis");
   pmonth.add(knapp);
   
   
   JFrame frame = new JFrame();
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   frame.getContentPane().setLayout(new java.awt.GridLayout(12, 1));
   frame.getContentPane().add(pmonth);
   frame.setSize(500, 500);
   frame.setVisible(true);
   
   GregorianCalendar kalender=new GregorianCalendar();
   int month=kalender.get(Calendar.MONTH);
   int today=kalender.get(Calendar.DAY_OF_MONTH);
   
   kalender.set(Calendar.DAY_OF_MONTH, 1);
   
   int weekday= kalender.get(Calendar.DAY_OF_WEEK);
   
   System.out.println("Søn Man Tir Ons Tor Fre Lør");
   
   for(int i=Calendar.SUNDAY; i< weekday; i++)
   	System.out.println("     ");
   
   do
   {
   	int day=kalender.get(Calendar.DAY_OF_MONTH);
   	System.out.printf("%3d", day);
   	
   	if(day==today) // marker dagen idag med ei stjerne
     System.out.print("*");
   	else
     System.out.print(" ");
   	if(weekday== Calendar.SATURDAY) //starter ei ny linje etter hver lørdag
     System.out.println();
   	
   	kalender.add(Calendar.DAY_OF_MONTH, 1);  // går videre til neste dag
   	weekday=kalender.get(Calendar.DAY_OF_WEEK);
     }
   while (kalender.get(Calendar.MONTH)==month); // avslutter loopen når kalender er dag 1 av neste måned
   
   if(weekday !=Calendar.SUNDAY)
   	System.out.println();  // printer ut siste linja om nødvendig.
   
   JPanel pkalender= new JPanel();
   JTextArea jta=new JTextArea();
   

 //  knapp.addActionListener(
     // new ActionListener(){
   	//	public void actionPerformed(ActionEvent e){
   //  String year=e.get(kalender);
  //    	String month="måned her";)}
     	
   
 }
}
         
     	
   
   
   
  
 
 

 

Her får jeg opp ei ramme med 2 tekstfelt..samt en knapp som foreløpig ikke gjør noe. Selve kalenderen vises nå bare i "console" vinduet...så jeg lurer på hvordan får jeg denne inn i selve rammen min ? :) På forhånd takk :!:

Lenke til kommentar
Slitter selv med den oppgave...sliter med å printe kalenderen opp på hovedrammen...

7876058[/snapback]

 

 

Såvidt jeg kan se det for meg skal det gå med å samle kalenderen opp i en String som til slutt printes i selva jpanel inni ramma ellerno..menne litt usikker på hvordan jeg går fram for å få hele kalenderen inn i stringen.. Noen forslag?

Lenke til kommentar

Jeg har fått til slik at kalenderen vises i et JTextArea... ordna det med en string.

 

før for mekker du en String temp = ""; og så bare setter du temp += med alt som egentlig skulle ha System.out funksjon.

 

Jeg får ikke til actionlisteneren

Endret av South_Bridge
Lenke til kommentar

Noen forslag:

 

Istedetfor å putte all koden inn i main()-metoden, burde du heller lage en constructor, og ha koden der. I tillegg burde du definere feltene (Swing-komponentene slik at de kan nås fra alle metoder i klassen din.

 

ActionListener er et interface, og dette må programmet ditt implementere hvis du skal få det til å virke. Du må også legge inn metoden actionPerformed i klassen, siden interfacet krever dette.

 

Har skrevet litt kode for å illustrere hva jeg mener. Fyll på med den koden dere allerede har laget.

 

import java.awt.Button;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;
import java.util.Formatter;
import java.util.GregorianCalendar;
import java.util.Locale;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class Program implements ActionListener {
 JPanel pmonth;
 JPanel pkalender;
 JTextArea jta;
 Button knapp;
 String kalenderTekst;

 public Program() {
   pmonth = new JPanel();

   pmonth.add(new JLabel("År:"));
   pmonth.add( new JTextField(5) );
   pmonth.add(new JLabel("Måned:"));
   pmonth.add( new JTextField(10) );
   knapp=new Button("Vis");
   knapp.addActionListener(this);
   pmonth.add(knapp);
   
   ...og så videre...
 }

 public void actionPerformed(ActionEvent evt) {
   GregorianCalendar kalender=new GregorianCalendar();
   int month=kalender.get(Calendar.MONTH);
   int today=kalender.get(Calendar.DAY_OF_MONTH);
  
   kalender.set(Calendar.DAY_OF_MONTH, 1);

   ...masse kode som dere har laget tidligere...

   jta.setText(kalenderTekst); // Sette kalenderteksten i tekst-boksen
 }

 public static void main(String[] args) {
   Program program = new Program(); // Denne linja starter det hele
 }
}

 

Hilsen Werner

Endret av wernie
Lenke til kommentar

takk for hjelpa werner! Men jeg har et lite spm, kalenderen med labels, textfield samt knappen er oppe å kjøre. men slik som koden min er nå henter den kun det jeg setter d.set(Calendar.MONTH) og mekker en kalender. Jeg vil jo lage kalender ut ifra hva brukeren taster i textfield.

 

hvordan får jeg til det?

 

public void actionPerformed(ActionEvent evt) 
{
 GregorianCalendar d=new GregorianCalendar();
 
 int month = d.get(Calendar.MONTH); // <-- HER VIL JEG HA INPUT
 int today = d.get(Calendar.DAY_OF_MONTH); 

 d.set(Calendar.DAY_OF_MONTH, 1);

 int weekday = d.get(Calendar.DAY_OF_WEEK);	
 
 String temp = "";

 temp += "MON  TUE  WED  THU  FRI  SAT  SUN\n";

 for(int i = Calendar.MONDAY; i < weekday; i++)
 {
 	temp += "           ";
 }
 
 do
 {
 	int day = d.get(Calendar.DAY_OF_MONTH);
 	temp += day;
 	
 	if (day == today)
   temp += "*     ";
 	else
   temp += "      ";
 
 	if (day >= 1 && day <= 8)
   temp += "   ";
 
 	if (weekday == Calendar.SUNDAY)
   temp += "\n";
 
 	d.add(Calendar.DAY_OF_MONTH, 1);
 	weekday = d.get(Calendar.DAY_OF_WEEK);
 }
 while (d.get(Calendar.MONTH) == month);

 if (weekday != Calendar.SATURDAY)
 	temp += "\n";

 jta.setText(temp);
}

Endret av South_Bridge
Lenke til kommentar

Det greieste ville vel vært å bruke en dropdown som inneholdt navn på månedene. Når du så valgte måned, kunne du bruke indeksen til valgt element til å sette måneden med.

 

Dagen i måneden kan du vel hente med getText()-metoden til tekstboksen.

 

Hilsen Werner

Lenke til kommentar

LØST: måtte rette på while løkka mi som fremdeles henta month fra Calendar.MONTH som jeg sletta

 

la til dette i public program

 

public program
{
pmonth.add(new JLabel("Måned:"));
 MonthCombo = new JComboBox();
 MonthCombo.setEditable(true);
 MonthCombo.addItem("Januar");
 MonthCombo.addItem("Februar");
 MonthCombo.addItem("Mars");
 MonthCombo.addItem("April");
 MonthCombo.addItem("Mai");
 MonthCombo.addItem("Juni");
 MonthCombo.addItem("Juli");
 MonthCombo.addItem("August");
 MonthCombo.addItem("September");
 MonthCombo.addItem("Oktober");
 MonthCombo.addItem("November");
 MonthCombo.addItem("Desember");
 pmonth.add(MonthCombo);

 

og får å få tak i dette la jeg til dette i

 

public void actionPerformed(ActionEvent evt)
{
d.set(Calendar.MONTH, MonthCombo.getSelectedIndex());

 

Den gir meg masse error, feks at java.awt.EventDispatchThread.run(Unknown Source). Jeg kan legge hele koden i en pastebin om det er ønskelig

Endret av South_Bridge
Lenke til kommentar

et annet problem dukket opp da

 

for(int i = Calendar.MONDAY; i < weekday; i++)
 {
 	temp += "      ";
 }
 
 do
 {
 	int day = d.get(Calendar.DAY_OF_MONTH);
 	temp += day;
 	
 	if (day == today)
   temp += "*   ";
 	else
   temp += "    ";
 
 	if (day < 10)
   temp += " ";
 
 	if (weekday == Calendar.SUNDAY)
   temp += "\n";
 
 	d.add(Calendar.DAY_OF_MONTH, 1);
 	weekday = d.get(Calendar.DAY_OF_WEEK);
 }
 while (d.get(Calendar.MONTH) == MonthCombo.getSelectedIndex());

 

Alle mnd vises nå fint, MEN mnd som begynner på en søndag blir 1. i mdn flyttet til mandag og 2. i mnd til neste mandag

 

LØST

Endret av South_Bridge
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...