Изобразите это ... Графический интерфейс программы JFrame, который разделен на 2, EAST и WEST. Первый JPanel - просто экран предварительного просмотра. На стороне ВОСТОК JFrame пользователь может создать изображение размером 1, 2 или 3. Пользователь нажимает кнопку «Добавить», и определенное изображение справа переходит на панель слева. Таким образом, если пользователь нажимает «Добавить» 3 раза с изображениями разного размера, то панель использует FlowLayout для организации добавленных изображений панели, добавленных слева.
Когда вы запускаете этот код, вы можете увидеть своего рода представление о том, что я хочу. На самом деле было бы неплохо создать все это за пределами экрана и назвать его MainPanel. Затем заставьте printPreview расширить MainPanel и уменьшить его для просмотра на экране. И пусть метод Printable раскрасит MainPanel в метод печати, который будет иметь правильный размер.
Итак, мой вопрос ...
-Можете ли вы скопировать или нарисовать JPanel до того, как он отобразится на экране?
-Есть лучший способ сделать то, что я хочу, я FlowLayout решительно решаю, что я хочу, поэтому JPanel, кажется, ответ, если нет чего-то, о чем я не знаю.
Хорошо, теперь, когда это изображено. Я построил некоторый код, примерно такой же SSCCE, как только могу.
Ребята, я пытался задать этот вопрос на форумах New To Java, и они просто не отвечают, я специально не публикуюсь дважды, я полностью переписал это с нуля.
import javax.swing.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.print.*;
import java.awt.event.*;
public class PrintGrid extends JFrame {
Paper paper = new Paper();
PrintGrid() {
super("Check out this grid panel");
setSize(672, 750);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(paper);
setVisible(true);
} // end PrintGrid constructor
// **************************
// ****** PAPER CLASS *******
// **************************
private class Paper extends JPanel {
final int PAPER_X = 672, PAPER_Y = 975, UNIT = 12, DPI = 72;
X1 x1a = new X1(), x1b = new X1(), x1c = new X1();
X2 x2a = new X2(), x2b = new X2(), x2c = new X2();
X3 x3a = new X3(), x3b = new X3(), x3c = new X3();
Paper() {
setPreferredSize(new Dimension(PAPER_X, PAPER_Y));
setBackground(Color.GRAY);
setLayout(new FlowLayout(FlowLayout.LEADING));
//Users will manually add different sizes to this sheet.
add(x1a);
add(x2a);
add(x3a);
add(x1b);
add(x1c);
add(x2b);
add(x3b);
}
// ******* Parent Class for GridUnits *******
abstract class GridUnit extends JPanel {
MouseListen ml = new MouseListen();
float alpha = 1.0f;
GridUnit() {
this.addMouseListener(ml);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
this.setBackground(Color.BLACK);
Graphics2D g2 = (Graphics2D) g;
g2.setComposite(makeComposite(alpha));
g.setColor(Color.WHITE);
g.drawRect(0, 0, this.getWidth()-1, this.getHeight()-1);
g.setColor(Color.darkGray);
g.fillRect(15, 15, this.getWidth()-30, this.getHeight()-30);
} // end paintComponent.
private AlphaComposite makeComposite(float alpha) {
int type = AlphaComposite.SRC_OVER;
return(AlphaComposite.getInstance(type, alpha));
}
void click() {
setVisible(false);
}
void entered() {
alpha = 0.8f;
repaint();
}
void exited() {
alpha = 1.0f;
repaint();
}
class MouseListen extends MouseAdapter {
public void mouseEntered(MouseEvent event) {
entered();
}
public void mouseExited(MouseEvent event) {
exited();
}
public void mousePressed(MouseEvent event) {
click();
}
}
} // end GridUnit class
class X1 extends GridUnit {
X1() {
setPreferredSize(new Dimension(UNIT*13, UNIT*18));
}
} // end X1 Class
class X2 extends GridUnit {
X2() {
setPreferredSize(new Dimension(UNIT*26, UNIT*18));
}
} // end X1 Class
class X3 extends GridUnit {
X3() {
setPreferredSize(new Dimension(UNIT*39, UNIT*18));
}
} // end X1 Class
} // end Paper class.
public static void main(String[] args) {
new PrintGrid();
} // end main method.
} // end PrintGrid class.