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ć?