Problem z java.swing

0

Witam,

oto mój program:

import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

class NummeralSystem{
	public int number;
	public String new_number;
	public static final int MAX_BASE = 16;
	private static final String pattern = "0123456789ABCDEF";

	NummeralSystem(int n, int base)
	{
	   this.number = n;
	   String result = "";

	   //process until n > 0
	   while (n>0)
	   {
	      result = pattern.charAt(n % base) + result;
	      n /= base;
	   }
	   this.new_number = result;
	}
	
	NummeralSystem(String n, int base)
	{
	   int i, x;
	   int p = 1;
	   int result = 0;

	   //base is too big or too small
	   if ((base > MAX_BASE) || (base < 2)){
			this.number = -1;
			return;
	   }
	   
	   n = n.toUpperCase(); // na wypadek wpisana z malych liter

	   for (i=n.length()-1; i>=0; i--)
	   {
	      x = valueOf(n.charAt(i), base);
	      if (x < 0)
	      {
	         this.number = -1;
			 break;
	      }
	      result += (x * p);
	      p *= base;
	   }

	   this.number = result;
	}
	
	private static int valueOf(char x, int base)
	{
	   for (int i=0; i<base; i++)
	   {
	      if (x == pattern.charAt(i))
	      {
	         return i;
	      }
	   }
	   return -1;
	}


}

public class ChangeNummeralSystemGrafika extends JFrame implements ActionListener,WindowListener{
	
	JLabel myTitle1, myTitle2;
	JTextField myNumber, myBase;
	JButton myActionButton;

	public static void main(String[] args){
		
		ChangeNummeralSystemGrafika myFrame = new ChangeNummeralSystemGrafika();
		myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
	}
	
	public ChangeNummeralSystemGrafika(){
		super("Reprezentacja liczby w różnych systemach liczbowych");
		setSize(400,120);
		setVisible(true);
		setResizable(false);
		addWindowListener(this);
		
		FlowLayout experimentLayout = new FlowLayout();

		Container myContainer = getContentPane();
		myContainer.setBackground(new java.awt.Color (170, 250, 0)); 
		myContainer.setLayout(experimentLayout);
		
		myTitle1 = new JLabel("Podaj liczbę: ");
		myContainer.add(myTitle1);
		
		myNumber = new JTextField();
		myNumber.setToolTipText("Podaj liczbę:");
		myNumber.setColumns(10);
		myContainer.add(myNumber);
		
		myTitle2 = new JLabel("Podaj system, w którym jest zapisana:");
		myContainer.add(myTitle2);
		
		myBase = new JTextField();
		myBase.setToolTipText("Podaj system, w którym jest zapisana:");
		myBase.setColumns(10);
		myContainer.add(myBase);
		
		myActionButton = new JButton("Przelicz");
		myActionButton.addActionListener(this);
		myContainer.add(myActionButton);

		repaint();
	}
	
	public void actionPerformed(ActionEvent e){
		if(e.getSource() == myActionButton){
		
			String tempparseMyBase = myBase.getText().trim();
			String tempparseMyNumber = myNumber.getText().trim();
			Integer parseMyBase = 0;
			Integer parseMyNumber = 0;
			
			
			 
			
			try { parseMyBase = Integer.parseInt(tempparseMyBase); }
            catch(NumberFormatException ex){
               // System.out.println(" nie jest poprawną liczbą.");
				JOptionPane.showMessageDialog(null,"Nie jest to poprawna baza!" ,"ERROR",0);
				return;
			}
			
			
			//try { parseMyNumber = Integer.parseInt(tempparseMyNumber); }
           // catch(NumberFormatException ex){
                //System.out.println(" nie jest poprawna bazą.");
				//JOptionPane.showMessageDialog(null,"Nie jest to poprawna liczba!" ,"ERROR",0);
				//return;
			//}
			//try { myScope(parseMyNumber); } 
			//catch(Exception x) {
				
				//JOptionPane.showMessageDialog(null, x.getMessage(),"ERROR",0);
				//return;
			//}
			try { maxBase(parseMyBase); }
			catch(Exception x){
				JOptionPane.showMessageDialog(null, x.getMessage(),"ERROR",0);
				return;
			}
			
			
			NummeralSystem ChangeNumbers = new NummeralSystem(tempparseMyNumber, parseMyBase);
			//System.out.println(ChangeNumbers.new_number);
	
			if(ChangeNumbers.number == 0 && !tempparseMyNumber.equals("0")){
				JOptionPane.showMessageDialog(null,"Błąd" ,"ERROR",0);
			}
			else{
				int new_tmp =2;
				String allsystems = "";
				while(new_tmp < 17){
				ChangeNumbers = new NummeralSystem(ChangeNumbers.number, new_tmp);
				//System.out.print("System " + new_tmp + ": " + ChangeNumbers.new_number + "\n");
				allsystems += "System " + new_tmp + ": " + ChangeNumbers.new_number + "\n";
				new_tmp++;
				}
				JOptionPane.showMessageDialog(null, allsystems ,"Info",1);
			}
			//System.out.println("END");
		}
	}
	public void windowActivated(WindowEvent e){}
	public void windowDeactivated(WindowEvent e){}
    public void windowIconified(WindowEvent e){}
    public void windowDeiconified(WindowEvent e){}
    public void windowClosed(WindowEvent e){}
    public void windowClosing(WindowEvent e){}
    public void windowOpened(WindowEvent e){}
	
	static void myScope(int x) throws Exception {

		if( x < 1 ){
			throw new Exception("Liczba jest zbyt mała.");
		} 
		
	}
	
	static void maxBase(int x) throws Exception {
		
		if( x > 16 || x < 2 ){
			throw new Exception("Baza nie znajduje sie w przedziale 2-16");
		}
	}
}

I w czym rzecz. U mnie na komputerze odpala się idealnie i bez najmniejszych problemów. Wszystko śmiga. Zaniosłem go na uczelnie... odpaliłem, a tam co? zonk. Problem z rysowaniem grafiki. Raz pokazują sie napisy, raz nie, raz więcej, raz mniej - bez jakiejś reguły. Da się to naprawić, ponieważ po zminimalizowaniu i zmaksymalizowaniu wszystko działa jak powinno, ale co to za program, który działa dopiero po zminimalizowaniu? I taka mała uwaga na koniec: mój komputer w domu jest szybszy anieżeli komputer na uczelni, jest aktualny pakiet jdk, a na uczelni nie mam w sumie pojecia... ale na pewno nie starszy niż 6 miesięcy.

W sumie można się domyślić, że to po prostu niektóre elementy rysują się szybciej, a inne wolniej i się nakładają.

Tak więc prosze o pomoc. W jaki sposób to naprawić?

0

dodaj

pack();

przed repaint();

 w konstruktorze ChangeNummeralSystemGrafika

pzdr.

a i btw. obiektow nie porownuje sie poprzez ==
:-]
0
Shimmi napisał(a)

dodaj

pack();

przed repaint();

 w konstruktorze ChangeNummeralSystemGrafika
> 
> pzdr.
> 
> a i btw. obiektow nie porownuje sie poprzez ==
> :-]

Dziękuję za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1