Nie wyświetlanie tekstu na labelu do momenu zmiany rozmiaru okna

0

Hi, sprawa ma się następująco: wybieram z menu edytuj opcje wklej, podaję tekst, zatwierdzam. Tekst nie pojawia się na labelu dopóki nie zmienię rozmiaru okna.
Proszę o pomoc, pozdrawiam!

 
package javaapplication27;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import java.awt.BorderLayout;
import javax.swing.JPanel;
class MenuFrame extends JFrame
{
     public MenuFrame()
     {
          setSize(300, 250);
          setTitle("Menu!");
          createMenu();
          addListeners();
     }
     public void createMenu()
     {
          menuBar = new JMenuBar(); 
          setJMenuBar(menuBar);

          editMenu = new JMenu("Edytyuj"); 
          fileMenu = new JMenu("Plik"); 

          subEditMenu = new JMenu("Text");  
          subEditMenuBold = new JMenuItem("Bold"); 
          subEditMenu.add(subEditMenuBold); 
          editMenu.add(subEditMenu); 
          editMenu.addSeparator(); 
          
          copy = new JMenuItem("Kopiuj"); 
          paste = new JMenuItem("Wklej"); 

          editMenu.add(copy);
          editMenu.add(paste);

          menuBar.add(editMenu);
          menuBar.add(fileMenu);
          menuBar.setVisible(true);

     }
     public void addListeners()
     {
          subEditMenuBold.addActionListener(new ActionListener() {
               public void actionPerformed(ActionEvent e) {
                     JOptionPane.showMessageDialog(
                             null,"Boldujemy!");
               }
          });

          copy.addActionListener(new ActionListener() {
               public void actionPerformed(ActionEvent e) {
                   int x = JOptionPane.showConfirmDialog(null, "Kopiować??");
                   if (x == JOptionPane.OK_OPTION)
                        JOptionPane.showMessageDialog(null, "Skopiowane :D");
                   if (x == JOptionPane.CANCEL_OPTION)
                        JOptionPane.showMessageDialog(null, "Jak tak to idz!");
                   if (x == JOptionPane.NO_OPTION)
                        JOptionPane.showMessageDialog(null, "Niech Ci bedzie...");
               }
          });

          paste.addActionListener(new ActionListener() {

               public void actionPerformed(ActionEvent e) {
                   String x = JOptionPane.showInputDialog("Podaj tekst");
                   JPanel panel = new JPanel();
                   panel.setSize(150, 100);
                   panel.setVisible(true);
                   getContentPane().add(panel, BorderLayout.CENTER);
                   JLabel label = new JLabel(x);
                   label.setVisible(true);
                   panel.add(label, BorderLayout.CENTER);
               }
          });
     }
     private JMenuBar menuBar;

     private JMenu editMenu;
     private JMenu fileMenu;
     private JMenu subEditMenu;

     private JMenuItem subEditMenuBold;

     private JMenuItem copy;
     private JMenuItem paste;
}
public class Main
{
    public static void main(String[] args)
    {
         MenuFrame x = new MenuFrame();
         x.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         x.setVisible(true);
    }
}
0

panel.revalidate();
panel.repaint();

najczęściej zapominane metody jeżeli chodzi o rysowanie : )

0

Hi, dziękuję bardzo za pomoc!

0

Hi, zabrałem się za wątki chciałem napisać klasę, która umożliwi tworzenie wątku przy utworzeniu obiektu mojej klasy.
Problemem okazała się to, że w mojej klasie dziedziczę po JFrame i tworząc kolejne wątki tworzę kolejne okna.
Nie potrafię jednakże rozbić rysowania ovala do innej klasy i jakoś to powiązać:

import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;
import javax.swing.JFrame;

class ThreadFrame extends JFrame implements Runnable {

     public void run() {
         while(true) {
              Random r = new Random();
              x = r.nextInt(200);
              y = r.nextInt(200);
               try {
                    Thread.sleep(180);
                    repaint();
               } catch (InterruptedException ex) {}
         }
     }

     public void paint(Graphics g) {
          if (c == "RED")
               g.setColor(Color.RED);
          if (c == "GREEN")
               g.setColor(Color.GREEN);
          g.fillOval(x, y, 15, 15);
     }

     public ThreadFrame(String color) {
          setSize(300, 250);
          setTitle("Threadowo :D");
          c = color;
     }
     private int x;
     private int y;
     public String c;
}
public class Main {

    public static void main(String[] args) {
        ThreadFrame x = new ThreadFrame("RED");
        x.setVisible(true);
        x.run();
        ThreadFrame y = new ThreadFrame("GREEN");
        y.setVisible(true);
        y.run();
    }
}

Proszę o pomysły jak sobie z tym problemem poradzić.
Chciałbym tworząc nowy obiekt klasy tworzyć nowy wątek a nie nową ramkę.

Pozdrawiam i dziękuję za pomoc!

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