1

私は非常に大きな問題を抱えています.JLabel、Jbuttonなどを作成するときに....画面に表示するという点では機能しますが、それらを長方形に配置したい場合、それらは消えて長方形のみが表示されます?

JLabel では、代わりにドローストリングを使用することにしましたが、今は JTextField をオンにしようとして困っています。何が欠けているのかわからない。

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

class main
{   
    public static void main (String Args [])
    {
        GUIwindow guiW = new GUIwindow();
    }
}

class GUIwindow extends JFrame
{
    JPanel grid = new JPanel();
    JTextArea screenArea = new JTextArea("", 10, 20);
    JScrollPane scrollBar = new JScrollPane(screenArea);

    GUIwindow()
    {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(500,800);
        setTitle("Title here");
        setLocationRelativeTo(null);

        screenArea.setLineWrap(true);
        screenArea.setEditable(false);


        grid.add(scrollBar);
        add(grid);
        setVisible(true);
    }

    public void paint (Graphics g)
    {
        g.setColor(Color.decode("#0232ac"));
        g.fillRoundRect(100, 50, 300, 600, 50, 50);
        g.setColor(Color.white);
        g.drawString("TitleonRect", 220, 80);
    }  

}
4

4 に答える 4

1

このpaint(Graphics g)関数は、コンポーネントを描画するものであり、次の 3 つの関数を表示順に呼び出す内容です。

  • protected void paintComponent(Graphics g): これでコンポーネントをペイントします。例: 背景
  • protected void paintBorder(Graphics g): これはコンポーネントの境界線を描画します
  • protected void paintChildren(Graphics g): これはコンポーネントの子を描画します

したがって、関数をオーバーライドしてペイントするものはすべて、paint(Graphics g)関数内で上記の順序でこれらの関数を呼び出す必要がありpaint()ます。super.paint(g)これら3つの関数をすでに呼び出しているコンテナのスーパークラス(JComponentクラス)のpaint()関数を呼び出しているため、呼び出しは機能します。

しかし、なぜpaint()カスタムペイントだけのためにこの関数をオーバーライドしているのでしょうか! 拡張するカスタム コンポーネントを作成してカスタム ペイント コードを配置し、それをオーバーライドして関数JComponent or JPanelを実装します。paintComponent()を呼び出すことを忘れないでくださいsuper.paintComponent()。このカスタム コンポーネントをフレームのコンテンツ ペインとして使用する必要がある場合: このペインを設定するだけframe.setContentPane(customPane)です。

塗装の仕組みを詳しく見る

于 2013-11-10T12:52:39.897 に答える