У меня возникли проблемы с поиском способа слияния двух 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();
}
}
}
Что вы здесь делаете? Как вы себе это представляете? –
, например. Учебник Oracle о CardLayout – mKorbel
Добро пожаловать в Stack Overflow! Ваш вопрос очень трудно интерпретировать - можете ли вы описать больше того, что вы хотели бы видеть, возможно, с изображением? Вы говорите о «слиянии» 'JFrame's, но это не ясно из вашего кода, где вы даже пытаетесь это сделать. У вас есть «фрейм», который является членом класса верхнего уровня и задан из «main()», а также для другого с тем же именем (обычно запутанным/неправильным) локальным для конструктора этого класса. Вы пытаетесь действовать в одном и том же «JFrame» в обоих этих местах? Нам нужно больше описания того, что вы хотите, чтобы помочь. –