2015-03-25 4 views
0

У меня возникли проблемы с поиском способа слияния двух JFrames в коде. Мне в основном нужна сетка и прочее из одного из JFrames и дополнительная граница вокруг него. Потому что мне нужно добавить несколько кнопок. Вот полный код:Как слить 2 JFrames?

package opimejpanelit; 
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import java.util.ArrayList; 

public class OpimeJpanelit { 

    public static JFrame frame; 
    public static JPanel panel; 

    public static void main(String[] args) { 

     frame = new JFrame("Huinjaa"); 
     frame.setSize(1000, 600); 
     frame.setLocationRelativeTo(null); 
     new OpimeJpanelit(); 
     //adds JPanel 
     panel = new JPanel(); 
     frame.add(panel); 
     panel.setSize(900,600); 

     frame.setVisible(true); 
     frame.setResizable(false); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    } 
     public OpimeJpanelit() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new BorderLayout()); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     private int columnCount = 9; 
     private int rowCount = 7; 
     private java.util.List<Rectangle> cells; 
     private Point selectedCell; 

     public TestPane() { 
      cells = new ArrayList<>(columnCount * rowCount); 
      MouseAdapter mouseHandler; 
      mouseHandler = new MouseAdapter() { 
       @Override 
       public void mouseMoved(MouseEvent e) { 
        Point point = e.getPoint(); 

        int width = getWidth(); 
        int height = getHeight(); 

        int cellWidth = width/columnCount; 
        int cellHeight = height/rowCount; 

        int column = e.getX()/cellWidth; 
        int row = e.getY()/cellHeight; 

        selectedCell = new Point(column, row); 
        repaint(); 

       } 
      }; 
      addMouseMotionListener(mouseHandler); 
     } 

     @Override 
     public Dimension getPreferredSize() { 
      return new Dimension(800, 400); 
     } 

     @Override 
     public void invalidate() { 
      cells.clear(); 
      selectedCell = null; 
      super.invalidate(); 
     } 

     @Override 
     protected void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      Graphics2D g2d = (Graphics2D) g.create(); 

      int width = getWidth(); 
      int height = getHeight(); 

      int cellWidth = width/columnCount; 
      int cellHeight = height/rowCount; 

      int xOffset = (width - (columnCount * cellWidth))/2; 
      int yOffset = (height - (rowCount * cellHeight))/2; 

      if (cells.isEmpty()) { 
       for (int row = 0; row < rowCount; row++) { 
        for (int col = 0; col < columnCount; col++) { 
         Rectangle cell = new Rectangle(
           xOffset + (col * cellWidth), 
           yOffset + (row * cellHeight), 
           cellWidth, 
           cellHeight); 
         cells.add(cell); 
        } 
       } 
      } 

      if (selectedCell != null) { 

       int index = selectedCell.x + (selectedCell.y * columnCount); 
       Rectangle cell = cells.get(index); 
       g2d.setColor(Color.BLUE); 
       g2d.fill(cell); 

      } 




      g2d.setColor(Color.GRAY); 
      for (Rectangle cell : cells) { 
       g2d.draw(cell); 
      } 



      g2d.dispose(); 
     } 
    } 
} 
+0

Что вы здесь делаете? Как вы себе это представляете? –

+0

, например. Учебник Oracle о CardLayout – mKorbel

+0

Добро пожаловать в Stack Overflow! Ваш вопрос очень трудно интерпретировать - можете ли вы описать больше того, что вы хотели бы видеть, возможно, с изображением? Вы говорите о «слиянии» 'JFrame's, но это не ясно из вашего кода, где вы даже пытаетесь это сделать. У вас есть «фрейм», который является членом класса верхнего уровня и задан из «main()», а также для другого с тем же именем (обычно запутанным/неправильным) локальным для конструктора этого класса. Вы пытаетесь действовать в одном и том же «JFrame» в обоих этих местах? Нам нужно больше описания того, что вы хотите, чтобы помочь. –

ответ

0

Я думаю, что невозможно слить в JFrames.

Посмотрите на свой код. Похоже, вы попытались добавить JPanel в тот же контейнер, но вместо этого создали для него новый JFrame.

Вы можете попробовать использовать метод remove (componentenet) в JFrame для удаления и добавления компонентов (если это полезно).

Если возможно, пожалуйста, дайте лучшую ясность или наглядное представление о том, что вы пытаетесь достичь.

Смежные вопросы