/ / Java: paintComponent () Oval sa nezobrazuje v Netbeans - java, swing, paintcomponent

Java: farbaComponent () Oval sa nezobrazuje v Netbeans - java, swing, paintcomponent

Snažím sa naučiť, ako nakresliť ovál v jave, ale farba, ktorú som vytvoril, nie je ničím nazvaná a pokúšať sa ju nazývať len spôsobuje ďalšie problémy.

Program beží úspešne, ale zobrazený obrázok sa nezobrazí.

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


public class TEST2{
public void paintComponent(Graphics g){
g.drawOval(70, 70, 100, 100);
}
public static void main(String[] args) {
TEST2 gui = new TEST2();
gui.setUpFrame();
}
public void setUpFrame(){
JFrame frame = new JFrame();
frame.setTitle("Images should be in this program");
frame.setSize(600,300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

}

odpovede:

0 pre odpoveď č. 1

Metóda paintComponent () je metóda, ktorú ste vy potlačenie a mala by byť prístupná vo vnútri triedy, ktorározširuje JPanel. Môžete vytvoriť novú triedu, ktorá rozširuje JPanel a prepíše metódu paintComponent () na kreslenie oválneho. Budete tiež musieť pridať nový JPanel do vášho JFrame, aby sa zobrazil. Modifikoval som váš kód pod ním by mal teraz zobrazovať ovál. Ako Madprogrammer poznamenal, mali by ste pravdepodobne vytvoriť svoje GUI v kontexte edt, aby sa zabránilo problémom súbežnosti, ale vynechám to pre jednoduchosť.

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

public class Test {

public static void main(String[] args) {
Test gui = new Test();
gui.setUpFrame();
}

public void setUpFrame() {
JFrame frame = new JFrame();
frame.setTitle("Images should be in this program");
frame.setSize(600, 300);
JPanel oval = new oval();
frame.setContentPane(oval);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public class oval extends JPanel{
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawOval(70, 70, 100, 100);
}
}

}

1 pre odpoveď č. 2

Začnite tým, že sa pozriete na Maľba v AWT a Swing a Vykonávanie vlastnej maľby

Aby ste mohli vykonávať vlastné maľovanie v Swingu, musíte ...

  1. Získajte z komponentov založených na hojdačke (ako napr JComponent alebo JPanel)
  2. Musíte to prepísať paintComponent metódu a vykonať si vlastnú maľbu v rámci tejto metódy.
  3. Pridajte túto súčasť k niečomu, čo je zobraziteľné (napr JFrame)

Mali by ste sa zavolať super.paintComponent pred vykonaním akéhokoľvek vlastného maliarstva

Aby ste sa uistili, že nevykonávate žiadne (bežné) chyby, mali by ste použiť @Override vysvetlivka

Ako príklad...

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Test2 extends JPanel {

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawOval(70, 70, 100, 100);
}

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

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}

JFrame frame = new JFrame();
frame.setTitle("Images should be in this program");
frame.add(new Test2());
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
});
}

}