javax の再描画が機能しない

ボユアン・ワン

ここに私のコードがあります:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;

public class Main {
// code main
public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.setSize(460, 500);
    frame.setTitle("Circles generator");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            frame.setVisible(true);

        }

    });

    String input = JOptionPane.showInputDialog("Enter n:");
    CustomComponents0 component = new CustomComponents0();
    frame.add(component);
    frame.getContentPane().validate();
        System.out.println("work before");
    frame.getContentPane().repaint();
        System.out.println("work");

    frame.getContentPane().repaint();
        System.out.println("work after");

}

// why is not JComponent
static class CustomComponents0 extends JLabel {

    private static final long serialVersionUID = 1L;

    @Override
    public Dimension getMinimumSize() {
        return new Dimension(200, 100);

    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(300, 200);

    }

    @Override
    public void paintComponent(Graphics g) {
        System.out.println("paint");
        int margin = 10;
        Dimension dim = getSize();
        super.paintComponent(g);
        g.setColor(Color.red);
        g.fillRect(margin, margin, dim.width - margin * 2, dim.height - margin * 2);

    }

}

ここにコードがあり、作業前に再描画を実行し、作業後に再描画を実行します。実行すると印刷されるはずです

work before
paint
work
paint
work after

でも塗装は一点しかなくて作業後なのに、どうしてこうなったの?どうすれば修正できますか?

ありがとう。

ゴミゴッド

Swing GUI オブジェクトは、イベント ディスパッチ スレッドでのみ構築および操作する必要ありますプログラムが正しく同期されていないため、どのような結果も発生する可能性があります。これは、最初のスレッドが を開始する前にどの程度到達するかに部分的に依存します。また、それ自体が同期することもあり、「に投稿されているイベントを合体させることができます」。EventQueueprintln()EventQueue

以下のバリエーションは、イベントが「エンキューされたのと同じ順序で」ディスパッチされるため、次の出力を確実に示しています。への呼び出しがどのように結合さrepaint()れるかに特に注意してくださいこのアプローチは実例に過ぎませんが、目標を達成するためには不必要に面倒です。代わりに、 を使用javax.swing.Timerしてここに示すようにアニメーションのペースを調整します

コンソール:

paint
work before
work
work after
paint

コード:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JLabel;

/** @see https://stackoverflow.com/a/44212328/230513 */
public class Main {

    public static void main(String[] args) {
        EventQueue.invokeLater(() -> {
            JFrame frame = new JFrame();
            frame.setTitle("Circles generator");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            CustomComponent component = new CustomComponent();
            frame.add(component);
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
            EventQueue.invokeLater(() -> { System.out.println("work before"); });
            EventQueue.invokeLater(() -> { frame.repaint(); });
            EventQueue.invokeLater(() -> { System.out.println("work"); });
            EventQueue.invokeLater(() -> { frame.repaint(); });
            EventQueue.invokeLater(() -> { System.out.println("work after"); });
        });
    }

    static class CustomComponent extends JLabel {

        private static final int N = 10;

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(300, 200);
        }

        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            System.out.println("paint");
            g.setColor(Color.red);
            g.fillRect(N, N, getWidth() - N * 2, getHeight() - N * 2);
        }
    }
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

javax.validation.constraintsからの注釈が機能しない

分類Dev

Javax.servletの依存関係が機能しない

分類Dev

JTabbedPaneの再描画が機能しない

分類Dev

javax.sound.midi.MidiChannelでMIDI機器が機能しない

分類Dev

javax.validation.constraintsがSpring Webで機能しない

分類Dev

javax検証APIがpojo検証で機能しない

分類Dev

javax.inject @Injectが期待どおりに機能しない

分類Dev

tomcat 8javax.websocketsが機能しない

分類Dev

Java-再描画が機能しない

分類Dev

再描画方法が機能しない

分類Dev

[email protected]」のようなアドレスからのjavax.mailが機能しない

分類Dev

javax検証がDTOクラスで機能しないのはなぜですか?

分類Dev

javax Bean検証がメソッドパラメータで機能しない

分類Dev

UTF-8文字セットがjavax.mailで機能しない

分類Dev

javax.net.ssl.trustStoreへのCacertsファイルパスが.warで機能しない

分類Dev

LinkedStackの値で再描画が機能しない

分類Dev

2つのjpanelを使用してSwingJavaの再描画が機能しない

分類Dev

SpringBoot-javaxインポートステートメントが正しく機能しない

分類Dev

長方形の描画が機能しない

分類Dev

DataTablesの描画が機能しない

分類Dev

javax.validation 2.0.1 List <Object>がスプリングブートで機能しない

分類Dev

javax.ws.rs。*(RESTクライアント)で非同期プロセスが機能しない

分類Dev

配列またはリストとしての値を持つハッシュマップに対してJavax検証が機能しない

分類Dev

Javax Bean検証:@Maxおよび@Minが機能していません

分類Dev

javax.crypto.AEADBadTagException-AES / GCM / NoPaddingは機能しますが、機能しません

分類Dev

JFrameでの再描画が機能していません

分類Dev

javaxの@NotNull注釈の使用

分類Dev

Eclipseのjavax.vecmath。*のjavadoc

分類Dev

Java 9の移行javax.annotation

Related 関連記事

  1. 1

    javax.validation.constraintsからの注釈が機能しない

  2. 2

    Javax.servletの依存関係が機能しない

  3. 3

    JTabbedPaneの再描画が機能しない

  4. 4

    javax.sound.midi.MidiChannelでMIDI機器が機能しない

  5. 5

    javax.validation.constraintsがSpring Webで機能しない

  6. 6

    javax検証APIがpojo検証で機能しない

  7. 7

    javax.inject @Injectが期待どおりに機能しない

  8. 8

    tomcat 8javax.websocketsが機能しない

  9. 9

    Java-再描画が機能しない

  10. 10

    再描画方法が機能しない

  11. 11

    [email protected]」のようなアドレスからのjavax.mailが機能しない

  12. 12

    javax検証がDTOクラスで機能しないのはなぜですか?

  13. 13

    javax Bean検証がメソッドパラメータで機能しない

  14. 14

    UTF-8文字セットがjavax.mailで機能しない

  15. 15

    javax.net.ssl.trustStoreへのCacertsファイルパスが.warで機能しない

  16. 16

    LinkedStackの値で再描画が機能しない

  17. 17

    2つのjpanelを使用してSwingJavaの再描画が機能しない

  18. 18

    SpringBoot-javaxインポートステートメントが正しく機能しない

  19. 19

    長方形の描画が機能しない

  20. 20

    DataTablesの描画が機能しない

  21. 21

    javax.validation 2.0.1 List <Object>がスプリングブートで機能しない

  22. 22

    javax.ws.rs。*(RESTクライアント)で非同期プロセスが機能しない

  23. 23

    配列またはリストとしての値を持つハッシュマップに対してJavax検証が機能しない

  24. 24

    Javax Bean検証:@Maxおよび@Minが機能していません

  25. 25

    javax.crypto.AEADBadTagException-AES / GCM / NoPaddingは機能しますが、機能しません

  26. 26

    JFrameでの再描画が機能していません

  27. 27

    javaxの@NotNull注釈の使用

  28. 28

    Eclipseのjavax.vecmath。*のjavadoc

  29. 29

    Java 9の移行javax.annotation

ホットタグ

アーカイブ