cuốn sách gpt4 ai đã làm

Hiển thị một GUI bên trong GUI khác bằng các khung bên trong

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 13:54:32 31 4
mua khóa gpt4 Nike

Tôi hiện đang phát triển GUI.

Tôi đã chọn đặt GUI của mình dựa trên dự án bluej - Scribble.

Khi bạn tạo một đối tượng ScribbleGUI, lớp DrawDemo sẽ tạo một Canvas được mở tự động cùng lúc. Tôi muốn cửa sổ Canvas không mở trừ khi tôi mở nó trong khung bên trong ScribbleGUI khi ScribbleGUI được mở.

Tôi đã thử thêm khung bên trong nơi Canvas sẽ được sử dụng với mã:

  // Tạo khung bên trong để hiển thị khung vẽ trong ScribbleGUI.
JIternalFrame nội bộCanvasFrame = new JInternalFrame("", true,
đúng, đúng, đúng);

Tôi không biết phải nói thế nào là tôi muốn Canvas đến đó.

Bạn có nghĩ rằng tôi đã chọn phương pháp thích hợp để kết nối hai GUI với nhau không? Hoặc sẽ tốt hơn nếu thay đổi mã của lớp Canvas để nó có chức năng tương tự như những gì tôi làm trong lớp ScribbleGUI?

Cảm ơn

Lớp ScribbleGUI:

nhập javax.swing.*;
import java.awt.event.*;
nhập java.awt.*;
import javax.swing.JOptionPane;
/**
* Viết mô tả lớp ScribbleGUI tại đây.
*
* @author (tên của bạn)
* @version (số phiên bản hoặc ngày)
*/
lớp công khai ScribbleGUI mở rộng DrawDemo
{
khung JFrame riêng tư;
bảng điều khiển JPanel riêng;
nút JButton riêng tư Viết nguệch ngoạc;
nút JButton riêng tưHình vuông;
nút JButton riêngBánh xe;
nhãn JLabel riêng;

ScribbleGUI công khai()
{
GUI();
}

GUI trống công khai()
{

// Đặt kích thước khung hình, khả năng hiển thị
frame = new JFrame("Phác họa xấu xí");
frame.setVisible(true);
frame.setSize(600,400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

// Tạo khung bên trong để hiển thị khung vẽ trong ScribbleGUI.
JIternalFrame nội bộCanvasFrame = new JInternalFrame("", true,
đúng, đúng, đúng);

nội bộCanvasFrame.setSize(400, 300);
nội bộCanvasFrame.setLocation(50, 50);
nội bộCanvasFrame.setVisible(true);



//Đặt hình nền
panel = new JPanel(new GridBagLayout());
panel.setBackground(Color.WHITE);

//Tạo các nút
nútScribble = new JButton("Scribble!");
nútSquare = JButton mới("Hình vuông!");
nútWheel = JButton mới("Bánh xe!");
label = new JLabel("Phác thảo xấu xí");

//Thêm hành động vào nút
nútScribble.addActionListener(ActionListener mới(){
public void actionPerformed(ActionEvent eventScribble){
colorScribble();
}

});
nútSquare.addActionListener(ActionListener mới(){
public void actionPerformed(ActionEvent eventSquare){
drawSquare();
}

});
nútWheel.addActionListener(ActionListener mới(){
public void actionPerformed(ActionEvent eventWheel){
drawWheel();
}

});
// Tạo khoảng trống giữa các đối tượng nút
Ràng buộc GridBagConstraints = new GridBagConstraints();

ràng buộc.insets = Insets mới (10,10,10,10);
ràng buộc.gridx = 0;
ràng buộc.gridy = 1;
panel.add(nhãn,ràng buộc);
ràng buộc.gridx = 0;
ràng buộc.gridy = 2;
panel.add(buttonScribble,ràng buộc);
ràng buộc.gridx = 0;
ràng buộc.gridy = 3;
panel.add(buttonSquare,ràng buộc);
ràng buộc.gridx = 0;
ràng buộc.gridy = 4;
panel.add(buttonWheel,ràng buộc);




// Đặt bảng ở phía tây của khung
frame.add(panel,BorderLayout.WEST);



}

}

DrawDemo类:

nhập java.awt.Color;
nhập java.util.Random;

/**
* Class DrawDemo - provides some short demonstrations showing how to use the
* Pen class to create various drawings.
*
* @author Michael Kölling and David J. Barnes
* @version 2011.07.31
*/

public class DrawDemo
{
private Canvas myCanvas;
private Random random;

/**
* Prepare the drawing demo. Create a fresh canvas and make it visible.
*/
public DrawDemo()
{
myCanvas = new Canvas("Drawing Demo", 500, 400);
random = new Random();
}

/**
* Draw a square on the screen.
*/
public void drawSquare()
{
Pen pen = new Pen(320, 260, myCanvas);
pen.setColor(Color.BLUE);

square(pen);
}

/**
* Draw a wheel made of many squares.
*/
public void drawWheel()
{
Pen pen = new Pen(250, 200, myCanvas);
pen.setColor(Color.RED);

for (int i=0; i<36; i++) {
square(pen);
pen.turn(10);
}
}

/**
* Draw a square in the pen's color at the pen's location.
*/
private void square(Pen pen)
{
for (int i=0; i<4; i++) {
pen.move(100);
pen.turn(90);
}
}

/**
* Draw some random squiggles on the screen, in random colors.
*/
public void colorScribble()
{
Pen pen = new Pen(250, 200, myCanvas);

for (int i=0; i<10; i++) {
// pick a random color
int red = random.nextInt(256);
int green = random.nextInt(256);
int blue = random.nextInt(256);
pen.setColor(new Color(red, green, blue));

pen.randomSquiggle();
}
}

/**
* Show canvas
*/
public Canvas showCanvas()
{
myCanvas = new Canvas("Drawing Demo", 500, 400);
return myCanvas;
}
/**
* Clear the screen.
*/
public void clear()
{
myCanvas.erase();
}
}

Canvas 类:

nhập javax.swing.*;
nhập java.awt.*;
import java.awt.geom.*;

/**
* Class Canvas - a class to allow for simple graphical
* drawing on a canvas.
*
* @author Michael Kölling (mik)
* @author Bruce Quig
*
* @version 2011.07.31
*/

public class Canvas
{
khung JFrame riêng tư;
private CanvasPane canvas;
private Graphics2D graphic;
private Color backgroundColor;
private Image canvasImage;

/**
* Create a Canvas with default height, width and background color
* (300, 300, white).
* @param title title to appear in Canvas Frame
*/
public Canvas(String title)
{
this(title, 300, 300, Color.white);
}

/**
* Create a Canvas with default background color (white).
* @param title title to appear in Canvas Frame
* @param width the desired width for the canvas
* @param height the desired height for the canvas
*/
public Canvas(String title, int width, int height)
{
this(title, width, height, Color.white);
}

/**
* Create a Canvas.
* @param title title to appear in Canvas Frame
* @param width the desired width for the canvas
* @param height the desired height for the canvas
* @param bgClour the desired background color of the canvas
*/
public Canvas(String title, int width, int height, Color bgColor)
{
khung = JFrame mới();
canvas = new CanvasPane();
frame.setContentPane(canvas);
frame.setTitle(title);
canvas.setPreferredSize(new Dimension(width, height));
backgroundColor = bgColor;
frame.pack();
setVisible(true);
}

/**
* Set the canvas visibility and brings canvas to the front of screen
* when made visible. This method can also be used to bring an already
* visible canvas to the front of other windows.
* @param visible boolean value representing the desired visibility of
* the canvas (true or false)
*/
public void setVisible(boolean visible)
{
if(graphic == null) {
// first time: instantiate the offscreen image and fill it with
// the background color
Dimension size = canvas.getSize();
canvasImage = canvas.createImage(size.width, size.height);
graphic = (Graphics2D)canvasImage.getGraphics();
graphic.setColor(backgroundColor);
graphic.fillRect(0, 0, size.width, size.height);
graphic.setColor(Color.black);
}
frame.setVisible(true);
}

/**
* Provide information on visibility of the Canvas.
* @return true nếu canvas hiển thị, ngược lại là false
*/
boolean công khai isVisible()
{
trả về frame.isVisible();
}

/**
* Vẽ đường viền của một hình nhất định lên khung vẽ.
* @param định hình đối tượng hình dạng sẽ được vẽ trên canvas
*/
rút thăm khoảng trống công khai (Hình dạng)
{
đồ họa.draw (hình dạng);
canvas.repaint();
}

/**
* Điền vào các kích thước bên trong của một hình nhất định bằng dòng điện
* màu nền trước của khung vẽ.
* @param định hình đối tượng hình dạng cần điền
*/
điền vào khoảng trống công khai (Hình dạng)
{
đồ họa.fill (hình dạng);
canvas.repaint();
}

/**
* Điền vào các kích thước bên trong của vòng tròn đã cho bằng dòng điện
* màu nền trước của khung vẽ.
* @param xPos Tọa độ x của điểm tâm vòng tròn
* @param yPos Tọa độ y của điểm tâm vòng tròn
* @paramđường kính Đường kính của hình tròn cần vẽ
*/
public void fillCircle(int xPos, int yPos, int đường kính)
{
Hình tròn Ellipse2D.Double = Ellipse2D.Double mới (xPos, yPos, đường kính, đường kính);
điền (vòng tròn);
}

/**
* Điền vào các kích thước bên trong của hình chữ nhật đã cho bằng dòng điện
* Màu nền trước của canvas Đây là một phương pháp tương tự.
* Hiệu ứng có thể đạt được bằng phương pháp "điền".
*/
public void fillRectangle(int xPos, int yPos, int width, int Height)
{
fill(Hình chữ nhật mới(xPos, yPos, chiều rộng, chiều cao));
}

/**
* Xóa toàn bộ canvas.
*/
xóa khoảng trống công khai()
{
Màu gốc = đồ họa.getColor();
graphic.setColor(backgroundColor);
Dimension size = canvas.getSize();
đồ họa.fill (Hình chữ nhật mới (0, 0, size.width, size.height));
đồ họa.setColor (bản gốc);
canvas.repaint();
}

/**
* Xóa các kích thước bên trong của hình tròn đã cho.
* phương pháp tiện lợi có thể đạt được hiệu quả tương tự.
* phương pháp "xóa".
*/
public void erasCircle(int xPos, int yPos, int đường kính)
{
Hình tròn Ellipse2D.Double = Ellipse2D.Double mới (xPos, yPos, đường kính, đường kính);
xóa(vòng tròn);
}

/**
* Xóa các kích thước bên trong của hình chữ nhật đã cho.
* phương pháp tiện lợi có thể đạt được hiệu quả tương tự.
* phương pháp "xóa".
*/
public void erasRectangle(int xPos, int yPos, int width, int Height)
{
xóa (Hình chữ nhật mới (xPos, yPos, chiều rộng, chiều cao));
}

/**
* Xóa phần bên trong của một hình nhất định trên màn hình.
* @param định hình đối tượng hình dạng cần xóa
*/
xóa khoảng trống công khai (Hình dạng)
{
Màu gốc = đồ họa.getColor();
graphic.setColor(backgroundColor);
Graphic.fill(shape); // xóa bằng cách tô màu nền
đồ họa.setColor (bản gốc);
canvas.repaint();
}

/**
* Xóa đường viền của hình dạng nhất định trên màn hình.
* @param định hình đối tượng hình dạng cần xóa
*/
public void deleteOutline(Hình dạng)
{
Màu gốc = đồ họa.getColor();
graphic.setColor(backgroundColor);
Graphic.draw(shape); // xóa bằng cách vẽ màu nền
đồ họa.setColor (bản gốc);
canvas.repaint();
}

/**
* Vẽ một hình ảnh lên canvas.
* @param image đối tượng Image sẽ được hiển thị
* @param xx phối hợp cho vị trí hình ảnh
* @param yy phối hợp cho vị trí Hình ảnh
* @return trả về giá trị boolean cho biết hình ảnh có đúng hay không
* đã tải hoàn toàn
*/
public boolean drawImage(Hình ảnh, int x, int y)
{
kết quả boolean = đồ họa.drawImage(hình ảnh, x, y, null);
canvas.repaint();
return result;
}

/**
* Vẽ một chuỗi trên Canvas.
* @param nhắn tin Chuỗi sẽ được hiển thị
* @param xx tọa độ cho vị trí văn bản
* @param yy phối hợp cho vị trí văn bản
*/
public void drawString(Chuỗi văn bản, int x, int y)
{
đồ họa.drawString(văn bản, x, y);
canvas.repaint();
}

/**
* Xóa một chuỗi trên Canvas.
* @param nhắn tin Chuỗi sẽ được hiển thị
* @param xx tọa độ cho vị trí văn bản
* @param yy phối hợp cho vị trí văn bản
*/
public void erasString(Chuỗi văn bản, int x, int y)
{
Màu gốc = đồ họa.getColor();
graphic.setColor(backgroundColor);
đồ họa.drawString(văn bản, x, y);
đồ họa.setColor (bản gốc);
canvas.repaint();
}

/**
* Vẽ một đường trên Canvas.
* @param x1 x tọa độ đầu dòng
* @param y1 y tọa độ đầu dòng
* @param x2 x tọa độ cuối dòng
* @param y2 y tọa độ cuối dòng
*/
public void drawLine(int x1, int y1, int x2, int y2)
{
đồ họa.drawLine(x1, y1, x2, y2);
canvas.repaint();
}

/**
* Đặt màu nền trước của Canvas.
* @param newColor màu mới cho nền trước của Canvas
*/
public void setForegroundColor(Color newColor)
{
đồ họa.setColor(newColor);
}

/**
* Trả về màu hiện tại của nền trước.
* @trả lại màu nền trước của Canvas
*/
Màu công khai getForegroundColor()
{
trả về đồ họa.getColor();
}

/**
* Đặt màu nền của Canvas.
* @param newColor màu mới cho nền của Canvas
*/
public void setBackgroundColor(Color newColor)
{
nềnColor = newColor;
đồ họa.setBackground(newColor);
}

/**
* Trả về màu nền hiện tại
* @return màu nền của Canvas
*/
Màu công khai getBackgroundColor()
{
trả về màu nền;
}

/**
* thay đổi Phông chữ hiện tại được sử dụng trên Canvas
* @param newFont phông chữ mới được sử dụng cho đầu ra Chuỗi
*/
public void setFont(Phông chữ mới)
{
đồ họa.setFont(newFont);
}

/**
* Trả về phông chữ hiện tại của canvas.
* @return phông chữ hiện đang được sử dụng
**/
Phông chữ công khai getFont()
{
trả về đồ họa.getFont();
}

/**
* Đặt kích thước của khung vẽ.
* @param chiều rộng chiều rộng mới
* @param chiều cao chiều cao mới
*/
public void setSize(int chiều rộng, int chiều cao)
{
canvas.setPreferredSize(new Dimension(width, height));
Hình ảnh oldImage = canvasImage;
canvasImage = canvas.createImage(chiều rộng, chiều cao);
graphic = (Graphics2D)canvasImage.getGraphics();
graphic.setColor(backgroundColor);
đồ họa.fillRect(0, 0, chiều rộng, chiều cao);
đồ họa.drawImage(oldImage, 0, 0, null);
frame.pack();
}

/**
* Trả về kích thước của canvas.
* @return Kích thước hiện tại của canvas
*/
Kích thước công khai getSize()
{
trả về canvas.getSize();
}

/**
* Chờ một số mili giây được chỉ định trước khi kết thúc.
* Điều này cung cấp một cách dễ dàng để xác định độ trễ nhỏ có thể
* được sử dụng khi sản xuất hình ảnh động.
* @param mili giây số
*/
chờ đợi khoảng trống công khai (int mili giây)
{
thử
{
Thread.sleep(mili giây);
}
bắt (InterruptedException e)
{
// bỏ qua ngoại lệ vào lúc này
}
}

/************************************************* **********************
* Lớp bên trong CanvasPane - thành phần canvas thực tế có trong
* Khung canvas Đây thực chất là một JPanel có thêm khả năng.
* làm mới hình ảnh được vẽ trên đó.
*/
lớp riêng CanvasPane mở rộng JPanel
{
sơn void công cộng(Đồ họa g)
{
g.drawImage(canvasImage, 0, 0, null);
}
}
}

câu trả lời hay nhất

Trong GUI Java, bạn cần có vùng chứa nơi bạn có thể thêm bất kỳ thành phần nào. Vì bản thân Frame là một thùng chứa và thành phần (xem API ), bạn có thể thêm nó vào một vùng chứa khác, như vậy vào một Khung hoặc Bảng điều khiển khác hoặc bất kỳ vùng chứa nào khác.

Sự nhầm lẫn duy nhất có thể xảy ra nếu bạn thêm cùng một thành phần hai lần. Nó không quan trọng đối với các thùng chứa giống nhau hoặc khác nhau. Cùng một đối tượng có nghĩa là một đối tượng trong cả hai vùng chứa - vì cả hai vùng chứa sẽ cố gắng thao tác/sửa đổi/thông báo cho cùng một đối tượng bằng các sự kiện khác nhau, điều này làm cho đối tượng đó không ổn định.

Miễn là mỗi thành phần là duy nhất, bạn có thể kết hợp chúng trong bất kỳ vùng chứa nào theo bất kỳ thứ tự nào. Một lần nữa, container là các thành phần, điều này làm cho chúng trở nên độc đáo.

Về java - hiển thị GUI trong GUI khác bằng khung bên trong, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/29977010/

31 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress