[Swing] 2 problemy z interfejsem

0

Witam,

Aktualnie piszę prostą grę w Swingu, Sapera. Całą logikę gry, już napisałem. Teraz pozostało mi tylko zrobić interfejs dla użytkownika. Stworzyłem prostego frame'a na którym dynamicznie tworzę przyciski. Mój problem polega na tym że gdy chcę użyć przycisków o wielkości mniejszej niż 40x40 pikseli, to zamiast cyferek oznaczających ile w pobliżu jest min, pojawiają się trzy kropki. Nawet przy rozmiarze czcionki równym np. 8. Najbardziej wkurzające jest to, że ten trókropek zajmuje 3x tyle miejsca co sama cyfra, która spokojnie mogła by się zmieścić do przycisku. Na screenach widać wyraźnie na czym polega problem:
http://img229.imageshack.us/img229/5794/sapha3.png - tak musi być by były widoczne cyfry, ale ja chcę mniejsze przyciski
http://img229.imageshack.us/img229/2144/sap2oz8.png - mniej więcej takiej wielkości powinny być przyciski, ale wtedy cyfer nie widać

Dodam, że środowisko to NetBeans 6.01.

Mam teraz jeszcze drugi problem, przyciski i czcionki już są w miarę widoczne, ale zauważyłem, że na Windowsie i na Linuksie program działa inaczej, tzn. stosowałem metode JButton.setBackground do ustawienia koloru tła przycisków.
Oprogramowanie tworzę na Linuksie i tu jest wszystko w porządku:
http://img73.imageshack.us/img73/9762/saperzn4.png
Lecz na Windowsie, wszystkie przyciski są takiego samego koloru:
http://img209.imageshack.us/img209/592/koszyk1.jpg
Chciałbym aby program wyglądał identycznie na obu systemach. Jak będzie trzeba, mogę udostępnić wszystkie źródła na forum, i ktoś miły sprawdzi gdzie jest błąd :).

0

Metoda bardzo dookoła - zamiast tekstu na przyciskach umieść obrazki. Ale na pewno jest jakiś normalny sposób na rozwiązanie tego problemu. Spróbuj zmniejszyć marginesy i obramowanie.
Pozdrawiam,
Afish

0

Dzięki Afish! Zmniejszyłem marginesy przez
przyc.setMargin(new java.awt.Insets(2, 2, 2, 2));
dla każdego nowego generowanego przycisku. Jeden problem rozwiązany :d.

0

Naprawdę nikt nie wie jak zmienić kolor przycisku, tak by to działało na Windowsie? Zwykłe JButton.setBackground nie działa. na razie kombinuje tak, by zamienić wszystkie buttony na togglebuttony, i dodałem opcję Windows mode w konfiguracji i wszystkie odkryte pola są "wciśnięte", jednak to nie jest do końca to czego poszukuję, zależy mi na kolorach.

0

Napisałem programik, i niespodzianka, JButton zmienia kolor po wywołaniu metody setBackground() (Windows XP SP2)

/* Jeden przycisk (JButton) zmieniający kolor po kliknięciu
 */
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Kameleon extends JFrame implements ActionListener
{
    private Color[] kolory={Color.BLACK,Color.BLUE,Color.CYAN,Color.DARK_GRAY,Color.GRAY,Color.GREEN,Color.LIGHT_GRAY,
                            Color.MAGENTA,Color.ORANGE,Color.PINK,Color.WHITE,Color.RED,Color.YELLOW};
    private int aktualny=kolory.length-1;
    //------------------------
    public static void main(String args[])
    {
        new Kameleon();
    }
    //------------------------
    public Kameleon()
    {
        super("Kameleon");
        setLayout(new FlowLayout(FlowLayout.CENTER));

        JButton b=new JButton("Kliknij mnie");
        b.setForeground(Color.WHITE);
        b.addActionListener(this);
        add(b);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(300,300);
        setVisible(true);
    }
    //------------------------
    public void actionPerformed(ActionEvent ae)
    {
        aktualny++;
        if (aktualny>=kolory.length)
        {
            aktualny=0;
        }
        ((JButton) ae.getSource()).setBackground(kolory[aktualny]);
    }
}

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