Помогите с рисованием нестандартной графики в Swing - PullRequest
0 голосов
/ 15 января 2011

Я знаю, что я не вызываю команду графической краски в мэйнфрейме для ее отображения. но я не уверен как. заранее спасибо

import java.awt.*;
import javax.swing.*;
public class MainFrame extends JFrame {

private static Panel panel = new Panel();

public MainFrame() {
    panel.setBackground(Color.white);
    Container c = getContentPane();
    c.add(panel);
}

public void paint(Graphics g) {
    g.drawString("abc", 20, 20);
}

public static void main(String[] args) {
    MainFrame frame = new MainFrame();
    frame.setVisible(true);
    frame.setSize(600, 400);
    frame.setResizable(false);
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

Ответы [ 4 ]

2 голосов
/ 15 января 2011

Прочтите раздел из учебника по Swing по Custom Painting , чтобы ознакомиться с примерами работы над рисованием и другими основами Swing.

Кроме того, не используйте Panel, это класс AWT. Используйте JPanel, который является классом Swing.

1 голос
/ 15 января 2011

Прежде всего, вам нужно создать свой AWT / Swing материал в Потоке рассылки событий .Во-вторых, вы не должны переопределять краску в главном окне.Вам необходимо создать подкласс Component и переопределить метод paintComponent(Graphics g), поместив туда все, что у вас есть в paint на данный момент.После этого добавьте компонент в рамку.Возможно, вам придется связываться с менеджерами компоновки в зависимости от ваших потребностей.

1 голос
/ 15 января 2011

Создайте новый класс, который расширяет JComponent, переопределяет публичный метод void paintComponent (Graphics g) и рисует вашу строку.

Добавьте этот переопределенный компонент в ваш фрейм.Нравится: frame.getContentPane().add(customComponent);

0 голосов
/ 15 января 2011

Вы можете создать класс, расширяющий JPanel, следующим образом:

 public class MyPanel extends JPanel{         
      public MyPanel(){
         setBackground(Color.WHITE);
      }

      public void paintComponent(Graphics g) {
        g.drawString("abc", 20, 20);
      }

 }

Затем вы можете добавить эту панель в свой JFrame.

 public class MainFrame extends JFrame {

     private JPanel panel;

     public MainFrame() {
         panel = new MyPanel();    
         add(panel, BorderLayout.CENTER);
     }


     public static void main(String[] args) {
         MainFrame frame = new MainFrame();

         frame.setSize(600, 400);
         frame.setResizable(false);
         frame.setLocationRelativeTo(null);
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         frame.setVisible(true);
    }
 }
...