gpt4 book ai didi

java - 绘图区域未显示(未正确对齐?)

转载 作者:行者123 更新时间:2023-12-02 02:11:22 24 4
gpt4 key购买 nike

我想知道为什么我创建的绘图区域没有显示在我的第二个面板中。我已经检查了它们的位置使用 getX 和 getY (250, 0,这是我假设的正确区域,因为那将是第二个面板的左上角),但我似乎无法弄清楚出了什么问题。我假设这是一个我没有权利的基本学习方面的问题,但似乎无法弄清楚问题是什么。如果您能向我解释出了什么问题以及我将在哪里修复它的正确方向,我将不胜感激。当我独立使用绘图区域时,我确实可以使用它;问题是我在使用其他 GUI 组件时无法让它出现。

谢谢^^

代码:
封装图;

import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSlider;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;


public class DrawingApp extends JFrame{
public static void main(String[] args) {

GridLayout grid = new GridLayout(1, 2);

JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final DrawingComponent drawingArea = new DrawingComponent();
drawingArea.setSize(600, 250);
JPanel leftPanel = new JPanel();
JPanel rightPanel = new JPanel();
JSlider greSlider = new JSlider();
JSlider bluSlider = new JSlider();
JSlider redSlider = new JSlider();
Point leftLocation = new Point(0, 0);
Point rightLocation = new Point(250, 0);

JLabel greLabel = new JLabel("Green");
JLabel bluLabel = new JLabel("Blue");
JLabel redLabel = new JLabel("Red");

rightPanel.setLocation(rightLocation);
drawingArea.setLocation(rightLocation);
// JButton button = new JButton("Hello");

leftPanel.setSize(250, 600);
//leftPanel.setLocation(leftLocation);
leftPanel.setBorder((BorderFactory.createLineBorder(Color.black)));

rightPanel.setSize(250, 600);
//rightPanel.setLocation(rightLocation);
rightPanel.setBorder((BorderFactory.createLineBorder(Color.green)));

leftPanel.add(greLabel);
leftPanel.add(greSlider);
leftPanel.add(bluLabel);
leftPanel.add(bluSlider);
leftPanel.add(redLabel);
leftPanel.add(redSlider);
rightPanel.add(drawingArea);
frame.add(leftPanel);
frame.add(rightPanel);
//rightPanel.add(button);
frame.setSize(500, 600);
frame.setLayout(grid);





leftPanel.setVisible(true);
rightPanel.setVisible(true);
frame.setVisible(true);


class SlideClickListener implements ChangeListener
{

ChangeListener slideListener = new ChangeListener(){

@Override
public void stateChanged(ChangeEvent e){
if(e.getSource() == greSlider){

}
}
};


public void stateChanged(ChangeEvent ce) {
throw new UnsupportedOperationException("Not supportedyet.");
}
}

class MouseClickListener implements MouseListener
{
public void mouseClicked(MouseEvent event)
{
int x = event.getX();
int y = event.getY();
System.out.println(x + " " + y);
drawingArea.drawPoints(x,y);
}
// Do­nothing methods
public void mouseReleased(MouseEvent event) {}
public void mousePressed(MouseEvent event) {}
public void mouseEntered(MouseEvent event) {}
public void mouseExited(MouseEvent event) {}
}

MouseListener listener = new MouseClickListener();
drawingArea.addMouseListener(listener);


}

}

如果需要,我可以包含 DrawingComponent 类,但假设它不是,因为我确信该类正在工作。

最佳答案

I'm assuming this is a problem with some fundamental learning aspect of this that I do not have right,

您似乎不了解布局管理器的工作原理:

leftPanel.setSize(250, 600);
//leftPanel.setLocation(leftLocation);
rightPanel.setSize(250, 600);
//rightPanel.setLocation(rightLocation);

这些语句都不会执行任何操作。布局管理器的工作是确定添加到面板的组件的大小和位置。在您的情况下,您尝试使用GridLayout。因此,添加到网格中的组件将在考虑框架的装饰后指定尺寸。因此,即使框架可能是 (500, 600),面板可用的空间也会更少(因为您需要考虑框架的标题栏和边框)。

此外,在将组件添加到面板之前,您应该将布局管理器分配给面板。

leftPanel.setVisible(true);
rightPanel.setVisible(true);

Swing 组件(除了顶级容器,如 JFrame、JDialog)默认是可见的,因此上面的代码不执行任何操作。

I can include the DrawingComponent class if needed,

在问题得到解决之前,您不知道什么与该问题相关或无关。我的猜测是您的 DrawingComponent 是问题所在。同样,JPanel 的默认布局管理器是 FlowLayout,它遵循添加到其中的任何组件的首选大小。我猜您的 DrawingPanel 没有实现 getPreferredSize() 方法,首选尺寸为 (0, 0),因此没有任何内容可绘制。

阅读 Swing 教程中关于 Custom Painting 的部分了解更多信息和工作示例以帮助您入门。

我建议您还查看本教程的布局管理器部分,了解布局基础知识和工作示例。

关于java - 绘图区域未显示(未正确对齐?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49989291/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com