当前位置: 首页 > 知识库问答 >
问题:

图形-使用参数(getSize())在整个窗口中绘制一条线

楚博雅
2023-03-14

我需要帮助。我想给drawLine()方法提供一个参数,该方法是从getSize()获得的。我想使用getSize()方法在整个窗口中画一条线。

package PROG2;

import java.awt.*;
import javax.swing.*;

class MyComponent extends JComponent {

    @Override
    public void paintComponent(Graphics g) {
        g.drawLine(100, 100, 200, 200);
    }
}
    
public class Übung1 extends JFrame{

    public static void berechnen() {
        int height = frame.getHeight(); //Here it says it doesn't know "frame" variable but I don't know how to declare it here.
        int width = frame.getWidth();
    }

    public static void main(String[] args){
            JFrame frame = new JFrame("First window");
            berechnen();
            frame.add(new MyComponent());
            frame.setSize(400, 400);
            frame.setVisible(true);
            frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            Graphics g = frame.getGraphics();

            // int width = frame.getWidth();
            // int height = frame.getHeight();
            System.out.println("Größe:" + frame.getSize());
            //System.out.println(width);
    }
}

共有1个答案

晋俊贤
2023-03-14

正如安德鲁已经说过的,

  • 您不想获取JFrame的尺寸或大小,而是想获取JFrame的contentPane中显示的组件,这里是您的MyComponent实例
  • 获取这些信息的最佳位置是在绘制线之前,在paintComponent方法内部
  • 总是先打电话给super的绘画方法

我还建议:

  • 如果您想要不透明的图像,请在JPanel的油漆组件方法中绘制,而不是在JComponent方法中绘制
  • 除非绝对需要,否则避免静态方法和字段

请注意,在下面的代码中,红线穿过JPanel的对角线,并继续绘制对角线,即使手动调整JFrame的大小:

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Stroke;

import javax.swing.*;

public class DrawLine extends JPanel {
    private static final Stroke LINE_STROKE = new BasicStroke(15f);
    private static final Dimension PREF_SIZE = new Dimension(800, 650);

    public DrawLine() {
        setPreferredSize(PREF_SIZE);
    }
    
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        
        // code to make the line smooth (antialias the line to remove jaggies)
        // and to make the line thick, using a wider "stroke"
        Graphics2D g2 = (Graphics2D) g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g2.setStroke(LINE_STROKE);

        // if we want a red line
        g2.setColor(Color.RED);

        // this is the key code here:
        int width = getWidth();
        int height = getHeight();
        
        // draw along the main diagonal:
        g2.drawLine(0, 0, width, height);
    }
    
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            DrawLine mainPanel = new DrawLine();

            JFrame frame = new JFrame("GUI");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(mainPanel);
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        });
    }

}
 类似资料:
  • 我是数据可视化方面的新手。我正在练习海运,我正在尝试用这个数据帧绘制一个条形图。我希望图表有3条在每个符号上,然而,输出只有1条在每个符号上。我能知道怎么修吗? 数据帧的一部分... 代码如下所示: 输出如下:

  • 问题内容: 有没有办法直接使用字典中的数据来绘制条形图? 我的字典看起来像这样: 我期待 工作,但事实并非如此。 这是错误: 问题答案: 您可以通过首先绘制条形图然后设置适当的刻度来分两行进行: 请注意,倒数第二行应在python3中读取,因为它会返回一个生成器,而matplotlib无法直接使用该生成器。

  • 所以我在只用线绘制形状时遇到了一个大问题。假设我从屏幕中间的一个点开始画一条线,然后以100个像素的距离向前画,角度为0,然后我用角度72度画另一条相同长度的线,以此类推,直到360度。它应该给我一个完美的五边形,一条线结束,另一条线从那个点开始,但是线在末端不相交,它非常适合角度为0/90/180/270的正方形,但我需要让它适用于每个形状,甚至是圆。我用这个东西来计算: 其中_cosinuse

  • 问题内容: 这是我的pandas数据帧’df’: I want to plot 3 groups of bar chart (according to ): for each channel: plot control booked value vs treatment booked value. hence i should get 6 bar charts, in 3 groups where

  • 使用matplotlib时,我可以使用{importmatplotlib.pyplotas plt}因为我使用Tkinter,所以我也会使用PicreCanvasTkAgg来做同样的事情 有人能帮我在如何实现matplotlib的停顿效果在菲格勒CanvasTkAgg。

  • 可以帮我弄清楚怎么用matplotlib画这种图吗? 我有一个熊猫数据框对象来表示这个表: 我想可视化每个< code >图形的< code>n和< code>m的大小:一个水平条形图,其中每一行在y轴的左侧都有一个包含< code >图形名称的标签;在y轴的右边,有两个细的水平条,一个在另一个的正下方,其长度代表< code>n和< code>m。应该可以清楚地看到,两个细条都属于标有图形名称的