2013-03-31 1 views
1

В настоящее время я пытаюсь нарисовать фигуры на JPanel, который находится в пределах другого JPanel, в пределах JFrame.Как вы рисуете фигуры на JPanel, который находится внутри другого JPanel?

Я искал Google и Youtube и выяснил, как рисовать фигуры в пределах JFrame, которые имеют одну панель, но не нашли ничего, что могло бы помочь мне в том, что я делаю. (может быть, я ничего не вижу).

код я видел до сих пор:

public class GameScreen 
{ 
    public void paintComponent(Graphics g) 
    { 
     super.paintComponent(g); 
     g.setColor(Color.red); 
     g.drawRect(100, 10, 30, 40); 
    } 

    public static void main(String[] args) 
    { 
     GameScreen gs = new GameScreen(); 
     JFrame f = new JFrame(); 
     f.setTitle(""); 
     f.setSize(400,400); 
     f.setVisible(true); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.add(gs); 
} 

Это все хорошо, когда я имею дело только с одной панели, но я хочу отображения формы на панели, которая находится в пределах 1'st панели Я создал.

+0

could'nt получить ваш question..If ​​вы хотите нарисовать много форм в одной панели затем создать собственную панель наследования 'JPanel' и переопределить его метод' paintComponent' и сделать столько, сколько фигур вы хотите нарисовать там на этой панели. –

ответ

2

Добавьте JPanel в JFrame так же, как и сейчас, но сделайте это с помощью своего собственного подкласса JPanel.

class MyPanel extends JPanel { 
    @Override 
    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     g.setColor(Color.red); 
     g.drawRect(100, 10, 30, 40); 
    } 

    @Override 
    public Dimension getPreferredSize() { 
     return new Dimension(400,400); // As suggested by camickr 
    } 
} 

Вы можете добавить это к JPanel, который сидит внутри JFrame

public static void main(String[] args) 
{ 
    MyPanel mp = new MyPanel(); 
    JPanel jp = new JPanel(); 
    jp.add(mp); 

    JFrame f = new JFrame(); 
    f.setTitle(""); 
    f.setSize(400,400); 
    f.setVisible(true); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    f.add(jp); 
} 

Это может работать для компонентов внутри компонентов, если добавить их в качестве детей компонентов. Ключ состоит в том, чтобы расширить компонент и переопределить методы, которые вы хотите изменить.

2

Это все хорошо, когда я имею дело только с одной панели,

Введенный код размещен отлично работает, потому что кадр использует BorderLayout. Таким образом, когда вы добавляете свою панель в рамку, размер увеличивается, и ваша пользовательская картина будет видна.

Я хочу отображать фигуры на панели, которая находится на 1-й панели, которую я создал.

Когда вы создаете панель, по умолчанию использует FlowLayout. Когда вы добавите пользовательскую панель рисования на эту панель, она будет отображаться по своему предпочтительному размеру, который будет (0, 0), так как вы не указали предпочтительный размер.

На панелях, которые выполняют обычную роспись, вам также необходимо реализовать метод getPreferredSize(), чтобы менеджер компоновки знал, как организовать панели. Например:

public Dimension getPreferredSize() 
{ 
    return new Dimension(200, 200); 
} 
Смежные вопросы