Wątek przeniesiony 2015-05-21 08:25 z Java przez bogdans.

JFrame, JPanel

0

Witam, mam problem z JFrame i JPanel. Mam utworzony JFrame, do JPanelu dodaje JButton i potem dodaje Jpanel do JFrame i chce to wyświetlic, lecz wyświetla mi się tylko zwykłe okno bez żadnych buttonów. Dopiero gdy rozszerzę, ono pojawiają się buttony i inne elementy.

KOD:

public class Pasc {
	JButton b1,b2;
	JPanel p1 = new JPanel();
	JPanel p2 = new JPanel();
	JTextField tx1;
	JTextArea ta1;
	JFrame frame;
	int a;
	String b;
	TrojkatPasc pasc;
	public Pasc(){
		frame = new JFrame();
		frame.setTitle("Trojkat Pascala");
		frame.setSize(350,350);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true); 
		frame.setResizable(true); 
		
		
		p1.setLayout(new FlowLayout(0,20,50));
		b1 = new JButton("Buduj trójkąt");
		p1.add(b1);
		
		ta1 = new JTextArea("");

		b1.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent e) {
				try{
				a=Integer.parseInt(tx1.getText());
				}catch (NumberFormatException e1){
					ta1.setText("podałeś litere");
					p2.add(ta1);
					return;
				}
				try {
					pasc = new TrojkatPasc(a);
				} catch (DziwnaWarosc e1) {
					System.out.println("lipa");
					return;
				}
				for (int i=0;i<=a;i++){
					b=pasc.wspolczynnik(i);
					ta1.append(b+"\n");

				}
			
			p2.add(ta1,BorderLayout.CENTER);	
			}
		});
		
		
		tx1 = new JTextField("",10);
		p1.add(tx1);
		
		frame.add(p2,BorderLayout.SOUTH);
		frame.add(p1, BorderLayout.WEST);
	}
	public static void main(String[] args) {
		Pasc t = new Pasc();
		
	}

}

Z góry dziekuje:)

0

Wrzuć w znaczniki kolorujące

0

Gotowe, dodam tylko że nawet w zwykłym programie gdzie mam tylko 1Jframe 1 JButton i 1 Panel bez innych rzeczy, działania guzików itd jest to samo

0

Daj setVisible na koniec konstruktora

0

Dzieki wielkie, mam jeszcze jedno pytanie, czy można tutaj w JTextArea wyśrodkować tekst?? Chodzi mi o tą linijkę:)

 for (int i=0;i<=a;i++){
                    b=pasc.wspolczynnik(i);
                    ta1.append(b+"\n");
 
                }

Tak żeby dodawany tekst był środkowany??

0

Nie ma funkcji centrującej. Ja sobie poradziłem tak (triangle to tablica dwuwymiarowa zawierająca trójkąt Pascala):

  • utworzenie tablicy Stringów
        String[] result = new String[n+1];
        for(int i=0;i<=n;i++)
        {
            StringBuilder sb = new StringBuilder("");
            for(int j=0;j<=i;j++)
            {
                sb.append(triangle[i][j]+" ");
            }
            result[i] = sb.toString().trim();
        }
  • dopisywanie do pola tekstowego z poprzedzaniem każdego wiersza ciągiem spacji o rosnącej długości
        int dl = result[n].length();
        output.setText("");
        for(int i=0;i<=n;i++)
        {
            StringBuilder sb = new StringBuilder("");
            for(int j=0;j<=(dl-result[i].length())/2;j++)
            {
                sb.append(" ");
            }
            output.append(sb.toString()+result[i]+"\n");
        }

To drugie możesz zrobić prościej korzystając z metody padStart w klasie Strings (Guava http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/Strings.html).

0

O jednym zapomniałem, czcionka nie powinna być proporcjonalna.

output.setFont(new Font("monospaced",Font.PLAIN,12));

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